Perforce でのワークスペース処理 TeamCity
Perforce 関連の操作を実行するために、TeamCity は通常「ワークスペースなし」モードで動作します。つまり、ワークスペースコンテキストなしで Perforce コマンドを実行します。たとえば、変更の追跡やほとんどのサーバー側操作にはワークスペースは必要ありません。
ワークスペースが作成されるケースは次のとおりです。
エージェント側のチェックアウトが有効になっている場合(これがデフォルトのチェックアウトモードです)。この場合、TeamCity はビルドソースをチェックアウトするための Perforce ワークスペースを作成します。
Perforce P4 でバージョン管理されたプロジェクト設定を使用します。
機能ブランチとしての Perforce ストリームを使用します。この場合、TeamCity は Perforce サーバー上にワークスペースを作成して、タスクストリームを正しく処理します。
Perforce ワークスペース名
作成されたワークスペースの名前は、TC_p4_ 接頭辞で始まります。機能ブランチをサポートするために、Perforce サーバー側で作成されたワークスペースには、TC_p4_server_ 接頭辞が付きます。
ビルド構成でエージェント側のチェックアウトを使用する場合は、次のようにワークスペース名を変更できます。
teamcity.perforce.workspace.prefix構成パラメーターを使用して、ワークスペース名の接頭辞を追加します。ワークフローで特定のワークスペース名パターンが必要な場合に備えて、カスタムワークスペース名を設定します。これを行うには、
vcsroot.<VCSRootExternalID>.p4clientパラメーターを設定します。カスタムワークスペース名が指定されている場合、TeamCity は、チェックアウト前に、対応する VCS ルート設定に従ってワークスペースを更新します (たとえば、VCS ルートでストリームサポートが有効になっている場合は、関連するストリームパラメーターを適用します)。チェックアウトされたソースをクラウドエージェントで再利用するも参照してください。
ワークスペース名には、ビルドエージェント名と、チェックアウトディレクトリおよび(オプションで)チェックアウトルールからビルドされたハッシュ値も含まれます。
Perforce ワークスペースパラメーター
エージェント側のチェックアウトを使用すると、TeamCity は、チェックアウトプロセス中に作成された Perforce ワークスペースを記述する環境変数を提供します。
チェックアウトに複数の Perforce VCS ルートが使用される場合、ビルドの VCS ルートのリストにある最初の VCS ルートに対して変数が作成されます。
P4USER—vcsroot.<VCS_root_ID>.userパラメーターと同じです。P4PORT—vcsroot.<VCS_root_ID>.portパラメーターと同じです。P4CLIENT—vcsroot.<VCS_root_ID>.p4clientパラメーターと同じで、エージェント上に生成された P4 ワークスペースの名前。
これらの変数は、チェックアウト後にカスタム Perforce コマンドを実行するために使用できます。例: PerforceTest VCS ルートのポートにアクセスできるようにするには、プロジェクトまたはビルド構成設定で env.P4PORT=%vcsRoot.PerforceTest.port% 環境変数を定義します。
ワークスペースの削除
Perforce ワークスペース(英語)は、ディポ内のファイルのサブセットをミラーリングした、ユーザーマシン上のファイルセットです。TeamCity は、エージェントマシンと Perforce サーバー上にワークスペースを自動的に作成します。時間の経過とともに、これらのワークスペースはサーバー / エージェントマシン上でかなりのリソースを消費する可能性があるため、定期的にクリアすることをお勧めします。
- デフォルトの削除メカニズム
デフォルトでは、TeamCity は次の場合にエージェント Perforce ワークスペースを削除します。
バージョン管理された設定がコミットされた直後(コミットごとにワークスペースが作成されます)。
エージェント側のチェックアウトの場合 — クリーンチェックアウトが実行されると(この場合、TeamCity は
p4 sync -fも実行します。以下の詳細を参照してください)。エージェントプロセスのバックグラウンド(ビルド間)で、現在のエージェントに関連付けられたワークスペースに存在しないワークスペースディレクトリが検出された場合。TeamCity エージェントは、未使用のチェックアウトディレクトリのクリーンアップを実行します(デフォルトのタイムアウトは 8 日間ですが、
system.teamcity.build.checkoutDir.expireHoursシステムプロパティで変更できます)。チェックアウトディレクトリが削除され、このディレクトリが Perforce ワークスペースに関連付けられている場合、このワークスペースも削除されます。Perforce ワークスペースのクリーンアップは、buildAgent.propertiesファイル内のteamcity.perforce.workspace.cleanup=false設定、またはルートプロジェクト構成パラメーターとしてサーバーレベルでグローバルに無効にすることができます。
- Perforce 接続設定
Perforce 管理者アクセス接続設定で Perforce ワークスペースを自動的に削除するオプションを有効にすると、7 日間以上非アクティブな TeamCity 生成ワークスペースが自動的に消去されます。ワークスペースは定期的にデータのクリーンアップで削除されます。
この接続を所有するプロジェクトとそのサブプロジェクト内のすべてのビルド構成に影響します。
Perforce ワークスペースを自動的に削除するオプションの状態に関係なく、サーバーワークスペースは自動的に削除されます。
TeamCity クラウドエージェント(
TC_p4という接頭辞で始まる名前)によって作成されたエージェントワークスペースは、対応する設定が有効になっている場合、削除されます。ベアメタルエージェントによって作成されたワークスペースには影響しません。接続設定に資格情報を入力したユーザーは、「管理者」権限(英語)を持っている必要があります。
クラウドエージェントのプロパティに
teamcity.perforce.keepWorkspaces=trueプロパティを追加して、このエージェントの自動ワークスペースを維持し、定期的なクリーンアップから除外することができます。
- VCS ルート設定
Perforce VCS ルート設定で Perforce ワークスペースを自動的に削除するオプションを有効にすると、ビルドが完了した後に TeamCity で生成されたワークスペースが自動的にクリーンアップされます。
この VCS ルートが接続されているビルド構成にのみ影響します。
ベアメタルエージェントとクラウド TeamCity エージェントの両方でエージェントワークスペースを削除します。
ビルドが完了するとワークスペースは削除され、新しいビルドごとにクリーンチェックアウトが強制されます。
この VCS ルートオプションが有効になっている場合、
teamcity.perforce.keepWorkspaces=trueプロパティはエージェントワークスペースの削除を妨げません。
- ワークスペースを手動で削除する
構成アクションメニューの Perforce ワークスペースを削除します ... 項目をクリックして、1 回限りのクリーンアップを実行します。

このアクションにより、エージェントとサーバーの両方のワークスペースをクリアできます。
サーバーワークスペースをクリアするには、Perforce ストリームへのパスを入力する必要があります。
エージェントワークスペースをクリアすると、非アクティブ期間のしきい値(日数)を設定できます。この制限を超えたワークスペースは削除されます。
Perforce 同期 -f とワークスペースの再利用
エージェント側のチェックアウトを使用すると、TeamCity は、エージェントのチェックアウトディレクトリにバインドされたワークスペースを作成します。チェックアウトは、増分 p4 sync コマンド(個人用ビルドと非個人用ビルドの両方)を使用して実行されます。
VCS ルートが p4 sync -p を使用するように設定されている場合、TeamCity は常にこのコマンドを実行してソースをチェックアウトします。
通常、各クリーンチェックアウトビルドは、ソースをクリーンアップする p4 sync -f コマンドになります。Perforce エージェントのチェックアウトについては、以下に説明する例外があります。
チェックアウト中のエラー
チェックアウト中にエラーが発生した場合、チェックアウト中にビルドが中断 / 停止された場合、またはタイムアウトが発生した場合、同じビルドエージェントの後続のビルドに対してクリーンチェックアウトは発生しません。代わりに、TeamCity は、状態から回復するために Perforce 機能に依存します。
VCS ルートクライアントマッピングの変更
通常、プロジェクト管理者が VCS ルートで指定された VCS ルートクライアントマッピングを変更すると、これは VCS ルート設定の変更と見なされ、クリーンチェックアウトになります。このクリーンチェックアウト動作は、teamcity.perforce.enable-no-clean-checkout=true 内部プロパティを使用して無効にできます。
teamcity.perforce.enable-no-clean-checkout 内部プロパティを変更すると、影響を受けるすべてのビルド構成に対して 1 回限りのクリーンチェックアウトが実行されます。
クライアント名またはストリームを使用するように VCS ルートが設定されている場合、対応するクライアント / ストリームのクライアントマッピングが Perforce で編集されていると、クリーンチェックアウトは発生しません。
クリーンチェックアウトに対する強制保護
TeamCity によって開始されるクリーンチェックアウトからビルド構成を保護するには、teamcity.agent.failBuildOnCleanCheckout 構成パラメーターを true に設定します。この場合、TeamCity はクリーンチェックアウトを実行する代わりにビルドを失敗させます。クリーンチェックアウトを実施するアクションによって明示的に要求された場合、またはビルド構成のバージョン管理設定のチェックアウトオプションで「ビルド前に checkout ディレクトリ内のすべてのファイルを削除します」オプションが有効になっている場合を除き、ワークスペースはクリーンされません。
カスタムチェックアウトパスを使用する場合、VCS 設定が変更されたときに TeamCity はチェックアウトディレクトリをクリーンアップしません。代わりにビルドに失敗します。クリーンチェックアウトを無視してインクリメンタルチェックアウトを続行するには、プロジェクトまたはビルド構成の teamcity.agent.failBuildOnCleanCheckout=ignoreAndContinue パラメーターを使用します。これは、チェックアウトディレクトリ内のソースが正しい状態にあることが絶対に確実な場合にのみ実行してください。
同じことが壊れたパーソナルビルドにも当てはまります。ソースが破損していてこのオプションが設定されている場合、TeamCity はクリーンチェックアウトを実行する代わりにビルドに失敗します。p4 clean を介して作業コピーをクリーンアップし、この後 ignoreAndContinue 値を続行してみることができます(指定された構成パラメーターを使用してカスタムビルドを実行するため)。
チェックアウトされたソースをクラウドエージェントで再利用する
新しい TeamCity クラウドエージェントごとにクリーンチェックアウトを回避するには、コードソースを含む永続ストレージをエージェントチェックアウトディレクトリにコピーまたはマウントします。ただし、Perforce はワークスペース、エージェントの IP アドレスと名前、エージェントに保存されているリビジョン、その他のデータを追跡するため、新しいクラウドエージェントでビルドを実行すると、p4 sync 操作によって既存のソースファイルが無視され、クリーンチェックアウトが行われます。
これを防止し、永続ストレージからソースを再利用するには、次の手順を実行します。
クリーンチェックアウトを明示的に無効にするには、ビルド構成に
teamcity.agent.failBuildOnCleanCheckout=ignoreAndContinueパラメーターを追加します。チェックアウトの開始前にワークスペースを調整するには、Bootstrap の歩数(英語)を有効にします。
1 つまたは複数のコマンドラインまたはスクリプトステップを構成に追加し、ブートストラップ中に実行するオプションを確認します。これらのブートステップでは次のことを行う必要があります。
ビルドチェックアウトディレクトリが永続ストレージを指しており、このストレージに必要なすべてのソースが正しいリビジョンでチェックアウトされていることを確認します。
p4 -c <p4_workspace_name> flush <changelist_revision>コマンドを実行して、ワークスペースに必要なソースがすべてすでに存在していることを Perforce サーバーに伝えます。カスタムワークスペース名を必要な値に設定します。これを行うには、
vcsroot.<VCSRootExternalID>.p4clientプロパティに新しい値を割り当てる setParameter サービスメッセージを送信します。echo "##teamcity[setParameter name='vcsroot.P4_ExternalVCSRootID.p4client' value='customP4ClientName']"
これらのブートストラップ手順を実行すると、TeamCity は P4 クライアント仕様を更新し、p4 sync コマンドを実行して、フラッシュされた <changelist_revision> と現在のビルドに関連付けられたリビジョン間の変更のみをフェッチするチェックアウトを実行します。
関連ページ:
VCS チェックアウトモード
ビルド構成のバージョン管理設定ページでは、プロジェクトのソースコードを VCS から取得する方法を構成できます。VCS ルートを接続してチェックアウトオプションを構成できます。VCS チェックアウトモードは、プロジェクトソースがエージェントに到達する方法に影響する設定です。このモードは、ソースのチェックアウトのみに影響します。現在のリビジョンおよび変更データの取得ロジックは TeamCity サーバーによって実行されるため、TeamCity サーバーはどのモードでも VCS サーバーにアクセスする...
バージョン管理でのプロジェクト設定の保存
TeamCity では、プロジェクト設定をバージョン管理リポジトリ(VCS)と同期できます。サポートされている VCS は、Git、Mercurial、Perforce、Subversion、Azure DevOps Server(旧 TFS)です。プロジェクト設定を XML 形式または Kotlin 言語で保存し、Kotlin ベースの DSL を使用してプログラムで設定を定義できます。重要なポイント:この機能は何をしますか ? 個々のプロジェクトの設定を XML または Kotlin 形式でリモ...
TeamCity と Perforce の統合
この記事では、TeamCity を Perforce P4 と統合して次のことを行う方法について説明します。P4 リポジトリに保存されているプロジェクトのソースをビルドします。Perforce ストリームを機能ブランチとして使用し、それらのソースを互いに独立して構築します。シェルブされた変更リスト内のファイルを事前テストおよび事前ビルドします。ソースに自動ラベルを適用します。Perforce HelixSwarm のコードレビューにビルドステータスを報告します。前提条件:TeamCity は P4...
ビルドパラメーターの設定
パラメーターは、TeamCity 設定およびビルドスクリプトの構文を介して参照するペアです。パラメーター部分は、生の値 () にすることも、別のパラメーターへの参照 () を含めることもできます。パラメーター型:TeamCity は 3 種類のパラメーターをサポートしています。構成パラメーター — ビルド構成内で設定を共有することを主な目的とするパラメーター。これらのパラメーターを使用して、テンプレートから作成された構成やレシピを使用する構成をカスタマイズすることもできます。TeamCity は...
サービスメッセージ
サービスメッセージは、ビルドに関するコマンド / 情報をビルドスクリプトから TeamCity サーバーに渡す特別に構成されたテキストです。TeamCity、それらはビルドの標準出力ストリームに書き込まれる必要があり、ビルドステップから出力またはエコーされますによって処理されます。例:echo ##teamcity[<messageName> 'value']echo
接続を構成
TeamCity 接続は、外部サービスへのアクセスに必要な資格情報を保存します。このサードパーティサービスの種類に基づいて、2 つの主要な接続カテゴリがあります。VCS 接続これらの接続は、GitHub、GitLab、Bitbucket クラウドなどの VCS プロバイダーへのアクセスに必要な情報を保存します。これらの接続は、プロジェクト、ビルド構成、パイプラインを最も速く作成する方法を提供します。認証は自動的に処理されるため、リポジトリを選択するだけでビルドステップの設定を開始できます。接続が...