TeamCity 2019.1ヘルプ

Git

TeamCityはすぐに利用できるGitをサポートします。Azure DevOpsサービスによるGitソース管理がサポートされています(下記の認証に関する注意事項を参照 )。

このページには、VCSルート設定のGit固有のフィールドの説明が含まれています。
一般的なVCSルートプロパティーについては、このセクションを参照してください。

注意事項 :

このページで:

一般設定

オプション

説明

URLを取得

リポジトリからデータを取得するために使用されるリモート GitリポジトリのURL。

プッシュURL

VCSラベリングビルド機能によって作成された注釈付きタグをリモートリポジトリにプッシュするために使用されるターゲットリモート GitリポジトリのURL。空白の場合は、取得URLが使用されます。

デフォルトブランチ

デフォルトのブランチを設定します。パラメータの参照はここでサポートされています。デフォルト値は refs/heads/masterです。

ブランチ仕様

ブランチ 機能のサポートに必要な、ブランチ名のパターンをリストします。一致したブランチは、デフォルトのブランチに加えて変更について監視されます。構文はチェックアウト規則 +|-:branch_nameに似ています。branch_name はVCSに固有のもの、つまりGitの refs/heads/ (オプションの * プレースホルダー付き)です。

ブランチとしてタグを使用

ブランチ仕様をブランチと同様にタグ名と一致させるブランチ(たとえば、+|-:refs/tags/<tag_name>)としてgit タグを監視/チェックアウトすることを可能にします。デフォルトでは、タグは無視されます。

ユーザー名スタイル

TeamCityがVCSの変更についてユーザー名を報告する方法を定義します。ユーザー名スタイルを変更しても、新しく収集された変更のみが影響を受けます。古い変更は、変更を収集した時点で有効だったスタイルで保存され続けます。

サブモジュール

サブモジュールを無視するのか、それともソースツリーの一部として扱うのかを選択します。サブモジュールリポジトリは、認証を必要としないか、同じプロトコルを使用し、VCSルートで設定されたものと同じ認証を受け入れる必要があります。

タグ/マージのユーザー名

ラベル付けに使用されるカスタムユーザー名。

ブランチマッチングルール

  • ブランチがパターンのない行に一致すると、その行が使用されます。

  • ブランチが複数の行とパターンを一致させる場合は、最も一致する行が使用されます。

  • 一致する行が複数ある場合は、以下の行が優先されます。
    ワイルドカードと一致するものはすべて、TeamCityインターフェースでブランチ名として表示されます。例: +:refs/heads/*refs/heads/feature1 ブランチと一致しますが、TeamCityインターフェースではブランチ名として feature1 のみが表示されます。
    ブランチのショートネームは次のように決定されています:

  • 行に括弧が含まれていない場合は、最初のパターン一致文字から最後のパターン一致文字までのパターンまたは行の一部がない場合は、全行が使用されます。

  • 行に括弧が含まれている場合は、括弧内の行の一部が使用されます。ここでブランチが指定されていて、あなたのビルド設定がVCSトリガーを持っていて、何らかのブランチに変更が見つかった場合、TeamCityはこのブランチでビルドをトリガーします。

サポートされているGitプロトコル

GitリポジトリのURLでは、以下のプロトコルがサポートされています。

  • ssh: (たとえば、ssh://git.somwhere.org/repos/test.git , ssh://git@git.somwhereElse.org/repos/test.git、scpのような構文: git@git.somwhere.org:repos/test.git )

認証設定

認証方法

説明

匿名

匿名の読み取りアクセスでリポジトリを複製するには、このオプションを選択します。

パスワード

有効なユーザー名 (クローンURLにユーザー名がない場合。ここで指定したユーザー名がURLのユーザー名をオーバーライドする)とリポジトリのクローン作成に使用するパスワードを指定します。
エージェント側のチェックアウトの場合は、Git 1.7.3+クライアントの場合のみがエージェントにインストールされていることがサポートされています。TW-18711(英語)を参照してください。
Team Foundation Server2013からホストされているGitの場合は、ここでNTLM認証情報を指定します。

Azure DevOps Servicesの認証には、パスワードの代わりに個人用アクセストークンを使用できます。TeamCityは、ホストされているAzure DevOpsサーバー(英語)(以前のTeam Foundationサーバー)インストールへのトークン認証をサポートしていません。

秘密鍵

SSHプロトコルにのみ有効です。秘密鍵はOpenSSHフォーマットになければなりません。秘密鍵リストからオプションの1つを選択し、有効なユーザー名を指定します(クローンURLにユーザー名がない場合、ここで指定したユーザー名がURLのユーザー名を上書きします)。
利用可能な秘密鍵オプション:

  • アップロードされたキー - プロジェクトにアップロードされたキーを使用します。詳細はSSH鍵管理を参照してください。

  • デフォルトの秘密鍵 - 一般的なsshツールで使用されるデフォルトの場所にあるファイルシステムで使用可能なキーを使用します: ファイルが存在する場合は <USER_HOME>/.ssh/config で指定されたマッピング、またはプライベートキーファイル <USER_HOME>/.ssh/id_rsa (ファイルはサーバーとサーバーに存在する必要があります) エージェント側のチェックアウトを使用する場合は

  • カスタム秘密鍵サーバーサイドチェックアウトのみをサポート。この方法を使用する場合、秘密鍵パスフィールドにサーバーマシン上の秘密キーファイルへの絶対パスを入力します。必要に応じて、パスフレーズを指定して、対応するフィールドでSSHキーにアクセスします。

GitHubに接続するために使用できるすべてのオプションについては、コメント(英語)を参照してください。

Azure DevOpsサービスへの認証

Azure DevOps ServicesでGitソース管理を使用する場合、以下のオプションが利用可能です。

個人アクセストークン

アクセストークンを使用するには、Azure DevOpsアカウントに個人用アクセストークン(英語)を作成する必要があります。ここで、リポジトリにコード アクセススコープを設定し、VCSルートを設定するときに使用する必要があります。

オプション

説明

ユーザー名

TFVCの場合は空白、Gitの場合は任意の値、たとえばusernameのままにします。

パスワード

以前に作成した個人用アクセストークンを入力してください

必要なアクセス範囲

TFSサブシステム

スコープ

TFVC

すべての範囲

Git

バージョン管理設定のコード(読み取り)/コード(読み取りと書き込み)

作業項目

作業項目 (読み取り)

コミット状況

コード (状況)

代替認証資格情報

ログイン/パスワードペア認証を使用するには、Azure DevOpsアカウントで代替資格情報(英語)を有効にする必要があります。このアカウントでは、VCSルートの設定時に使用するセカンダリーユーザー名とパスワードを設定できます。

サーバー設定

これらは、サーバー側のチェックアウトの場合に使用される設定です。

オプション

説明

改行コードをCRLFに変換

すべてのテキストファイルの行末をCRLFに変換します(リポジトリ設定で core.autocrlf=true を設定するように機能します)。選択しない場合、行末変換は実行されません( core.autocrlf=falseの設定として機能します)。サーバー側のチェックアウトにのみ影響します。このプロパティーを変更すると、清潔なチェックアウトが行われます。

エージェント設定

これらは、エージェント側のチェックアウトの場合に使用される設定です。
エージェント側のチェックアウトではSSHのサポートが制限されています。サポートされている認証方法は、「デフォルト秘密鍵」と「アップロードされた秘密鍵」だけです。
エージェント側のチェックアウトを使用する予定の場合は、Git 1.6.4+をエージェントにインストールする必要があります。

オプション

説明

gitへのパス

エージェントで使用されるgit実行可能ファイルへのパスを指定します。 %env.TEAMCITY_GIT_PATH%に設定すると、自動的に検出されたgitが使用されます。詳細はエージェントでGit実行可能ファイルを参照してください

クリーンポリシー/クリーンファイルポリシー

エージェントで git clean コマンドを実行するとき、およびどのファイルを除去するかをここで指定してください。

鏡を使う

有効にすると (デフォルト)、TeamCityはエージェントの system\git ディレクトリーにリポジトリを複製し、ビルドのチェックアウトディレクトリーを更新するときにミラーを代替リポジトリとして使用します。その結果、(作業ディレクトリーのみがクリーンアップされるため)クリーンチェックアウトが高速化され、(エージェント上に特定のGitリポジトリのクローンが1つしかないため)ディスクスペースが節約されます。

このオプションを無効にすると、 teamcity.git.use.local.mirrors プロパティーが trueに設定されていない限り、TeamCityはリポジトリをビルドの作業ディレクトリーの直下に複製します。

エージェントでGit実行可能ファイル

エージェント側のチェックアウトを使用するには、TeamCityにエージェント上のGitコマンドラインクライアントバージョン1.6.4+が必要です。

推奨されるアプローチは、gitクライアントがTeamCityエージェントの PATH で利用可能であることを確認し、VCSルートの「Path to git」設定を空白のままにすることです。
一部のマシンにgitコマンドラインしかない場合は、VCSルートの「Path to git」設定を %env.TEAMCITY_GIT_PATH% 値に設定します。

GitをエージェントのPATHに追加する代わりに、TEAMCITY_GIT_PATH 環境変数(またはエージェントの buildAgent.properties ファイルの env.TEAMCITY_GIT_PATH プロパティー)をgit実行可能ファイルへのフルパスに設定できます。

TEAMCITY_GIT_PATH が定義されていない場合、Gitエージェントプラグインはエージェントの起動時にインストールされているgitを検出しようとします。最初に次の場所からgitを実行しようとします。

  • Windowsの場合 - git.exe を実行しようとします。
    • C:\Program Files\Git\bin
    • C:\Program Files (x86)\Git\bin
    • C:\cygwin\bin
  • * nixの場合 - git を実行しようとします。
    • /usr/local/bin
    • /usr/bin
    • /opt/local/bin
    • /opt/bin

これらの場所のいずれにもgitが見つからない場合は、PATH 環境変数を介してアクセス可能なgitを実行しようとします。
互換性のあるgit(1.6.4+)が見つかると、TEAMCITY_GIT_PATH 環境変数に報告されます。この変数は、VCSルート設定のgitへのパスフィールドで使用できます。その結果、そのようなVCSルートを使用した設定は、gitが検出されたか、エージェントプロパティーで指定されたエージェント上でのみ実行されます。

サーバーでのGitガベージコレクションの設定

TeamCityサーバーは、サーバーに設定されたVCSルートで使用されるすべてのGitリポジトリのローカルクローンを維持します。サーバーはこれらのクローンで1日に何度もフェッチを実行するため、クローンは予測可能なパフォーマンスを維持するために定期的な最適化を必要とします。クローンのGitガベージコレクションが長時間実行されなかった場合、変更を収集するプロセスが遅くなるか、メモリ関連のエラーを報告し始める可能性があります。TeamCityは、ネイティブのGitクライアントがサーバー上で見つかると、定期的にgit gcを自動的に実行できます。Git GCを実行できないと、関連する正常性レポートが生成されます。

警告を修正する/自動git gc要件を満たすには、次を実行します。

  1. TeamCityサーバーにネイティブGitクライアントを手動でインストールします。

  2. Git実行可能ファイルへのパスを指定します。
    • 実行可能ファイルを含む環境を Path 環境変数に追加し、サーバーを再起動します: または

    • サーバーを再起動せずに、teamcity.server.git.executable.path 内部プロパティーでディレクトリーへのフルパスを設定します。

TeamCityがGitガベージコレクションを実行すると、詳細が teamcity-cleanup.log に記録されます。gitガベージコレクションが失敗すると、対応する警告が表示されます。

TeamCityは、合計時間がクォータの5時間を超えないようになるまでGitガベージコレクションを実行します。 teamcity.server.git.gc.quota.minutes 内部プロパティーを使用して、クォータを変更できます。
Gitガベージコレクションは毎晩午前2時に実行されます。これは、次のようなcron式で内部プロパティーを指定することで変更できます。teamcity.git.cleanupCron=0 0 2 * * ? (プロパティーを有効にするためにサーバーを再起動します)。 git gc プロセスの動作が遅く、割り当てられた時間内に完了できない場合は、デフォルトのGit構成ファイルで git-repack 構成を確認してください(たとえば、--window-memory を増やして git gc のパフォーマンスを改善できます)。

ローカルのGitクローンが何らかの手動保守を必要とする場合は、<TeamCity Data Directory>/system/caches/git ディレクトリーにあります。ディレクトリー内の map ファイルには、リポジトリのURLとリポジトリのベアクローンを格納するサブディレクトリーとの間のマッピングが含まれています。

Git LFS

TeamCityはエージェント側のチェックアウト用にGit LFSをサポートします。これを使用するには、git 1.8.5+とGit LFSをビルドエージェントマシンにインストールします。Git LFSは、git lfs install コマンドを使用して有効にする必要があります。(Windowsでは、昇格したコマンドプロンプトが必要になる場合があります)。より多くの情報はGit LFSのドキュメント(英語)で利用可能です。

内部プロパティー

Git VCSでは、以下の内部プロパティーを設定することが可能です。

プロパティー

デフォルト

説明

teamcity.git.idle.timeout.seconds

1800

リモートリポジトリと通信するためのアイドルタイムアウト。このタイムアウトの間にデータが送受信されなかった場合、プラグインはタイムアウトエラーをスローして、プロセスが永久にハングするのを防ぎます。

teamcity.git.fetch.timeout

1800

(廃止予定)gitフェッチ操作のための teamcity.git.idle.timeout.seconds のオーバーライド

teamcity.git.fetch.separate.process

true

TeamCityがgit fetchを別のプロセスで実行するかどうかを定義する

teamcity.git.fetch.process.max.memory

512M

別個の取り出しプロセス用のJVM -Xmxパラメーターの値。また、メインサーバープロセスに加えて構成されたメモリが使用されるため、サーバーマシンに十分なメモリがあることを確認する必要があります。また、git fetchを実行し、それぞれが構成された量のメモリを使用する複数の子プロセスがあります。

teamcity.git.monitoring.expiration.timeout.hours

24

teamcity.server.git.gc.enabled

false

サーバーのクリーンアップ中にTeamCityが git gc を実行するかどうか (ネイティブgitが使われています)

teamcity.server.git.executable.path

git

サーバー上のネイティブgit実行可能ファイルへのパス

teamcity.server.git.gc.quota.minutes

60

git gcの最大実行時間

teamcity.git.cleanupCron

0 0 2 * * ? *

デフォルトではgit-pluginのクリーンアップ時のクーロン表現(英語) - 毎日午前2時。

teamcity.git.stream.file.threshold.mb

128

JGitがストリームを使用してオブジェクトを拡張するまでのしきい値(メガバイト単位)。リポジトリに大きなバイナリファイルがあり、TW-14947(英語)で説明されている症状が見られる場合はそれを増やしてください。

teamcity.git.buildPatchInSeparateProcess

true

Git-pluginはパッチを別のプロセスでビルドします。サーバープロセスでパッチをビルドするにはfalseに設定します。パッチを作るためにはgit-pluginはリポジトリファイルをメモリに読み込まなければなりません。メモリ不足にならないようにするために、git-pluginはしきい値より小さいサイズのオブジェクトだけを読み込みます。より大きなオブジェクトの場合はストリームが使用され、それらは遅くなることがあります。(TW-14947(英語))。別のプロセスでパッチを構築すると、すべてのオブジェクトがメモリに読み込まれます。パッチ処理は、個別フェッチ処理のメモリ設定を使用します。

teamcity.git.mirror.expiration.timeout.days

7

未使用のリポジトリのクローンがサーバーマシンから削除されるまでの日数。変更の確認や現在のバージョンの取得など、このリポジトリに対してTeamCity操作がない場合、リポジトリは未使用と見なされます。これらの操作はかなり頻繁に行われるため、7日間というのはかなり高い値です。

teamcity.git.commit.debug.info

false

見つかったコミットごとに追加のデバッグ情報をログに記録するかどうかを定義する

teamcity.git.sshProxyType

SSHプロキシのタイプ、サポートされている値: http , socks4 , socks5。socks4プロキシはリモートホスト名を解決できないため、UnknownHostExceptionが発生した場合はsocks5に切り替えるか、gzサーバーのエントリをTeamCityサーバーマシンのhostsファイルに追加してください。

teamcity.git.sshProxyHost

SSHプロキシホスト

teamcity.git.sshProxyPort

SSHプロキシポート

teamcity.git.connectionRetryAttempts

3

接続をテストし、失敗を認める前に現在のリポジトリの状態を取得するためにリモートホストへの接続を確立しようとした回数

teamcity.git.connectionRetryIntervalSeconds

4

接続試行間の間隔(秒)

teamcity.git.use.local.mirrors

false

TeamCityは、" Use mirror"が有効な場合にのみ、このプロパティーの状態をチェックします: "オプションはVCSルート設定で無効になっています:

デフォルトでは、"鏡を使う"を無効にすると、TeamCityはビルドの作業ディレクトリーにリポジトリを複製します。
エージェントの system\git ディレクトリーにリポジトリを複製するには、teamcity.git.use.local.mirrorstrue に設定します。ビルドを実行すると、TeamCityはこのディレクトリーからビルドの作業ディレクトリーにリポジトリをコピーします。

teamcity.git.use.shallow.clone

false

TeamCityは、" Use mirror"が有効な場合にのみ、このプロパティーの状態をチェックします: "オプションがVCSルート設定で無効になっており、teamcity.git.use.local.mirrorstrueに設定されています:

teamcity.git.use.shallow.clonetrueに設定されている場合、TeamCityはリポジトリの最新バージョンのみを複製します。これは、浅いクローンを作成することと同じです。つまり、git clone 操作の深(英語)さを 1に設定します。

最後のコミット以外にコミットを保存する必要がない場合(たとえばビルドの実行に使い捨てのクラウドインスタンスを使用する場合が多い場合など)、"鏡を使う"オプションを無効にしてinternalを設定することでセットアップのパフォーマンスを最適化できます: 以下のプロパティー

  • teamcity.git.use.local.mirrors=true
  • teamcity.git.use.shallow.clone=true

それ以外の場合は、"鏡を使う"オプションを有効にしておくことをお勧めします。

Git用のエージェント設定

プロパティー

デフォルト

説明

teamcity.git.use.native.ssh

false

エージェントをチェックアウトするとき:TeamCityがネイティブSSH実装を使用するべきかどうか。

teamcity.git.idle.timeout.seconds

1800

エージェント側のチェックアウトが使用されているときのgitフェッチ操作のアイドルタイムアウト。この間にフェッチ・プロセスからの出力がなければ、フェッチは終了します。8.0.4より前のデフォルトは600でした。

制限

エージェントでチェックアウトを使用する場合、チェックアウト規則の限られたサブセットがサポートされています。Gitプラグインはいくつかのチェックアウト規則を疎なチェックアウトパターンに変換します。ファイルを再マップしない規則のみがサポートされています

+:some/dir -:some/dir/subDir

サポートされていないルールの例は +:some/dir=>some/otherDirです。

既知の問題

  • リポジトリをフェッチしている間java.lang.OutOfMemoryError。通常、リポジトリに大きなファイルがあるときに発生します。デフォルトでは、TeamCityはフェッチを別のプロセスで実行します。このプロセスで使用可能なメモリを増やすには、teamcity.git.fetch.process.max.memory内部プロパティーを変更します( 上記のこのプロパティーの説明を参照)。

  • Windowsサービスとして実行されるTeamcityは、ネットワークに割り当てられたドライブにアクセスできないため、そのようなドライブにあるgitリポジトリを操作することはできません。これを機能させるには、teamcity-server.batを使用してTeamCityを実行します。

  • JGitでストリームを使ったインフレーションは OutOfMemoryErrorを防ぎますが、時間がかかることがあります。(詳細についてはjgit-dev(英語)の関連スレッドと課題に関するTW-14947(英語)の課題を参照してください)。課題に記載されているのと同様の条件に遭遇した場合は、teamcity.git.stream.file.threshold.mbを増やしてみてください。さらに、OutOfMemoryErrorを防ぐためにTeamCity専用のメモリの総量を増やすことをお勧めします。

Gitのサポートはオープンソースのプラグインとして実装されています。開発リンクについては、プラグインのページ(英語)を参照してください。


関連事項:

管理者ガイド : ブランチ リモート実行トリガ