TeamCity 2020.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 コマンドを実行するとき、およびどのファイルを除去するかをここで指定してください。

ビルド構成が複数のVCSルートに依存している場合は、VCSチェックアウトルールを使用して、これらのルートごとに個別のエージェントチェックアウトディレクトリを構成することをお勧めします。このように、git clean はクリーニング中にこれらのチェックアウトディレクトリを削除しません。

鏡を使う

It is recommended to always leave this option enabled.

When enabled (default), TeamCity clones the Git repository and creates its mirror under the agent's system\git directory. TeamCity uses this mirror as an alternate repository when updating the checkout directory for a build. This speeds up clean checkout (because only the build working directory is cleaned) and saves disk space (as the mirror is the only clone of the given Git repository on an agent).

See also, how to prepare a mirror on a cloud agent.

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

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

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

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

If Git is not found in any of these locations, it tries to run the git accessible via the PATH environment variable.
If a compatible git (1.6.4+) is found, it is reported in the TEAMCITY_GIT_PATH environment variable. This variable can be used in the gitへのパス field in the VCSルート settings. As a result, the configuration with such a VCS root will run only on the agents where Git was detected or specified in the agent properties.

クラウドエージェント上のGitミラー

By default, TeamCity creates a mirror(英語), that is a copy, of your Git repository under the agent's system\git directory. To save time and disk space on fetching source files, TeamCity points to this mirror via the Git alternate mechanism when updating the checkout directory for a build.

Comparing to self-hosted TeamCity agents, cloud agents require extra steps to add a Git mirror:

  1. When preparing a cloud image, clone the repository under the agent image's system/git directory. If necessary, you can store multiple *.git directories side by side.

  2. Create a map file under the system/git directory and describe the mapping between the original repository and its mirror. For example,

    ssh://git@<host>/<git_folder>.git = <git_folder>.git

When starting a build, a cloud agent will check the mirrors specified in the map file and fetch the difference between the required origin and its mirror. The origin URL in the map file must match the URL set in the VCS root.
This way, builds will run significantly faster, with no need to check out the whole remote repository every time the new cloud agent starts.

サーバーでの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 fetch 操作のための teamcity.git.idle.timeout.seconds のオーバーライド

teamcity.git.fetch.separate.process

true

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

teamcity.git.fetch.process.max.memory

このプロパティは明示的な -Xmx を提供し、自動 -Xmx セットアップを無効にします。

メインサーバープロセスに加えて、構成されたメモリが使用されるため、サーバーマシンに十分なメモリがあることを確認します。git fetch および git patchを実行する複数の子プロセスが存在し、それぞれが構成されたメモリ量を使用します。Gitフェッチのために -Xmx1024m よりも大きなヒープメモリを必要とする大きなリポジトリの場合、64ビットJavaに切り替えるが必要になる場合があります。

teamcity.git.fetch.process.max.memory.limit

デフォルトでは、TeamCityは git fetch および git patch のネストされたJavaプロセスを開始し、これらのプロセスの -Xmx を自動的に選択します。

このプロパティは、TeamCityが自動的に設定できる git fetch または git patch の可能な最大 -Xmx 値を指定します。

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プラグインは、別のプロセスでパッチをビルドし、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 checks the state of this property only if the " 鏡を使う " option is disabled in the VCS root settings. _

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

Git用のエージェント設定

プロパティ

デフォルト

説明

teamcity.git.use.native.ssh

false

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

teamcity.git.idle.timeout.seconds

1800

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

制限

Gitプラグインは、git sparce-checkout(英語)を使用してエージェント上のGitファイルをチェックアウトします。プラグインは、GitでサポートされるVCSチェックアウトルールのセットを制限する単純なファイルマッピング操作のみを実行できます。

次のルールがサポートされています。

+:dirA/dirA1 -:dirA/dirA1/dirA2 +:. => dirA/dirA1/dirA2 +:dirA => dirA +:dirA/dirA1 => dirA/dirA1 +:dirA/dirB/dirC => dirD/dirE/dirA/dirB/dirC

1つのルートに複数のチェックアウトルールを指定する場合は、チェックアウトディレクトリ(ルールの右側)に共通の親ディレクトリがあることを確認してください。例:

+:dirA/dirB/dirC => dirG/dirH/dirA/dirB/dirC +:dirD/dirE/dirF => dirG/dirH/dirD/dirE/dirF

既知の問題

  • teamcity.git.fetch.process.max.memory プロパティが指定されている場合のリポジトリからのフェッチ中のjava.lang.OutOfMemoryError。TeamCity 2019.2以降、推奨されるアプローチは、このプロパティを無効にして、自動メモリ管理をTeamCityに委譲することです。

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

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

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