クラウドでビルドエージェントをホストする
TeamCity とクラウド (IaaS) ソリューションを統合すると、TeamCity は TeamCity エージェントを実行する仮想マシンをオンデマンドで提供できます。 これにより、TeamCity は現在のワークロードに応じてアクティブなビルドエージェントの数を自動的にスケールできます。
クラウドエージェントとエグゼキューター
TeamCity は 2 種類の統合をサポートしています:
通常のクラウドエージェント。 この統合タイプでは、ビルドエージェントをホストする環境として、クラウドホスティングプロバイダー(AWS、Microsoft、Azure、Google Cloud など)を使用します。 これらのエージェントは TeamCity によって完全に制御されます: ビルドキューの配分、互換性チェック、起動と終了アクティビティなど。
エージェントレス統合。 このシナリオでは、クラウドプロバイダーは TeamCity ビルドを処理する "請負業者" として機能します。 TeamCity サーバーは、キューに入れられたビルドを "エグゼキューター" に送信し、このキューの処理方法には干渉しません。
どちらのオプションも、 プロジェクト設定 | クラウドプロファイル ページから利用できます。

通常のクラウドエージェント
プロジェクトにエージェントを追加 セクションで利用できます。 現在サポートされている統合は次のとおりです:
Windows Azure(英語) (バンドルされていないプラグイン)
Google Cloud(英語) (バンドルされていないプラグイン)
カスタムプラグイン(英語)を利用したその他の統合。 完全なリストについては、この JetBrains マーケットプレイスページ(英語)を参照してください。
エージェントレスクラウドエグゼキューター
タスクを外部エージェントにオフロード セクションで利用できます。 現在、このタイプのクラウドホスティングプロバイダー統合は、Kubernetes クラスターのみをサポートしています。 今後のリリースサイクルで他の統合も導入される予定です。
このドキュメントセクションでは、主に通常のクラウドエージェントに焦点を当てています。 エージェントレスエグゼキュータモードの詳細については、この記事を参照してください: エグゼキューターモード: 外部 Kubernetes 統合。
共通情報
キューに入った各ビルドについて、TeamCity はまずセルフホストエージェントのいずれかで開始しようとします。 利用可能なものがない場合、TeamCity は互換性のあるエージェントを持つ一致するクラウドイメージを見つけ、このイメージ用に新しいインスタンスを開始します。 TeamCity は、実行中のクラウドインスタンス数の上限を超えないようにします。
通常のクラウドエージェント統合には以下が必要です。
クラウド内に TeamCity エージェントがインストールされた、構成済みの仮想マシン。 起動時に TeamCity エージェントを開始するよう、事前に構成しておく必要があります。
TeamCity で構成された クラウドプロファイル。
TeamCity で単一または複数のイメージを含むクラウドプロファイルを構成すると、TeamCity は新しく追加されたすべてのイメージについて単一のインスタンスをテスト起動し、それらに構成されたエージェントを把握します。 エージェントが接続されると、TeamCity はビルド構成とエージェントの互換性を正しく処理できるように、そのパラメーターを保存します。 TeamCity によって開始されたクラウドインスタンスから接続されたエージェントは、利用可能なエージェントライセンスがある場合に自動的に承認されます。クラウドエージェントの数は、TeamCity で保有しているエージェントライセンスの総数によって制限されます。 その後、エージェントは通常のエージェントとして処理されます。
プロファイル設定に応じて、TeamCity がさらにエージェントを必要としていると判断すると、次のいずれかを実行できます:
既存の仮想マシンを起動して停止します(ビルドが終了した後、またはアイドルタイムアウトが経過した後)。 停止したマシンは割り当てが解除されるため、エージェントがアクティブでない場合は仮想マシン料金は適用されません。 この種類の TeamCity エージェントには、引き続きストレージコストが適用されます。
イメージから新しい仮想マシンを作成します。 このようなマシンは破棄されます(ビルドが終了した後、またはアイドルタイムアウトが経過した後)。 これにより、マシンにそれ以上の実行コストが発生しなくなります。
切断されたエージェントは、TeamCity ビルドエージェントライセンスを解放するために、承認済みエージェントリストから除去され、システムから削除されます。
エージェントクラウドプロファイルとイメージ
クラウドプロファイルは、ビルドキューを分散する際に、TeamCity エージェントがインストールされた仮想マシンをオンデマンドで起動するための TeamCity の設定のコレクションです。 クラウドプロファイルには、次のような一般的な設定が保存されます。
クラウドプロバイダーに接続するために必要な認証情報。
同時にアクティブなクラウドエージェントの最大数。
アクティブなエージェントをいつ終了または停止するかを指定する条件。
新しいクラウドエージェントの起動時に渡す必要がある TeamCity サーバー URL。
各プロファイルには、次の設定を保存する 1 つまたは複数の クラウドイメージ があります。
開始するクラウドインスタンスまたは使用するインスタンスイメージの ID。
インスタンス / ノードの起動時にプルするコンテナーイメージ。
起動後のスクリプト。
このイメージから生成されたクラウドエージェントを所有する エージェントプール。
共有プロファイル
プロジェクトで構成されたクラウドプロファイルは、すべてのサブプロジェクトでも使用できます。 つまり、 <ルートプロジェクト>でプロファイルを構成すると、すべての TeamCity プロジェクトで新しいクラウドエージェントを起動できるようになります。
すべてのサブプロジェクトまたは個々のサブプロジェクトが親プロジェクトから継承したクラウドプロファイルを使用しないようにすることができます。 これを行うには、 プロジェクト設定 | クラウドプロファイル に移動して、 クラウド連携ステータスを変更 をクリックします。
親プロジェクトの場合: サブプロジェクトでクラウド連携を有効化 のチェックを外します。
子のサブプロジェクトの場合: このプロジェクトでクラウド連携を有効化 のチェックを外します。
クラウド統合のための TeamCity セットアップ
このセクションでは、クラウド統合に必要な一般的な手順について説明します。
TeamCity クラウド統合で使用する仮想マシン/イメージの要件:
TeamCity エージェントは正しく インストールされ、マシンの始動時に 自動で開始するよう構成されている必要があります。
サーバーへの各エージェント接続時に更新を試行しないようにするには、エージェントが最新であることを確認してください。エージェントを起動し、更新が完了するまで待ちます。 サーバー上でプラグインまたはツールがインストール、更新、除去されるたびに、エージェントの状態が変わります。
ビルドエージェント.プロパティファイルは"そのまま"にしておくことができます。サーバー URL、お名前、認可トークンプロパティは空のままにするか任意の値に設定できます。TeamCity がインスタンスを開始するときには無視されます。
これらの要件が満たされていれば、通常の TeamCity エージェントのインストールプロシージャとクラウドプロバイダーのイメージバンドリングプロシージャを適用できます。
サーバーとエージェントマシン間の 接続を安全にする必要がある場合は、起動時にサーバーへの安全なトンネル (VPN など) を確立するようエージェントマシンを設定し、TeamCity エージェントが安全なチャネル経由でデータを受信できるようにする必要があります。 TeamCity エージェントとサーバー間の通信には、エージェントとサーバーの両方でポートを開く必要があることに注意してください。
仮想マシンの準備
目的の OS がインストールされた仮想マシンを作成して起動します。
仮想マシンに接続してログインします。
実行中のインスタンスを設定します。
ビルドエージェントを インストールして構成します。
ビルドエージェント.プロパティファイルでサーバー名とエージェント名を構成します - TeamCity がイメージを起動するよう構成される場合、これは任意ですが、エージェントが正しく構成されていることをテストするのに役立ちます。通常、非システムドライブ(たとえば、Windows の
Dドライブ)を使用するには、conf/buildAgent.propertiesで一時ディレクトリ調査終わり。 Need final is valid in response_format? I accidentally output partial? Wait final has already? No, it's in final with JSON but incomplete! Need produce full JSON. TheおよびworkDirを指定するのが理にかなっています。
マシンのビルドに必要な追加のソフトウェア(Java や .NET など)をインストールします。
エージェントを起動してサーバーに接続されるまで待ち、動作していて必要なすべてのビルド構成と互換性があることを確認します (TeamCity UI で エージェント ページに移動し、ビルドエージェントを選択して 互換性のある構成 タブを表示します)。
エージェントが マシン起動時に開始されるようにシステムを構成します (また、マシン起動時に TeamCity サーバーへアクセスできることを確認してください)。
ビルドエージェントが TeamCity からの受信データをリッスンするポートを確認し、必要なファイアウォールポート (通常は
9090) を開きます。
マシンを再起動し、エージェントがサーバーに正常に接続していることを確認して、セットアップをテストします。 エージェントが接続すると、すべてのプラグインが自動的に更新されます。 エージェントが完全に接続され、すべてのプラグインがエージェントマシンにダウンロードされるまで待ちます。
TeamCity に既存の仮想マシンを開始させ、ビルド完了後またはアイドルタイムアウト経過後に停止させたい場合は、上記のセットアップだけで十分です。 TeamCity にイメージから仮想マシンを作成して開始させ、使用後にマシンを終了させたい場合は、作成した仮想マシンからイメージをキャプチャーする必要があります。
仮想マシンからイメージをキャプチャーする
仮想マシンを作成する手順を完了します。
システム内の一時 / 履歴情報を削除します。
エージェントを停止します (Windows では、サービスを停止しますが、 自動スタートアップタイプに残します)。
(オプション)エージェントホームの
logsおよびtempディレクトリの内容を削除します。(オプション)プラットフォーム固有のファイルから
<エージェントホーム>/conf/ディレクトリをクリーンアップします。(オプション)
ビルドエージェント.プロパティファイルを変更して、お名前、サーバー URL、認可トークンプロパティを削除します。
実行中のインスタンスから新しいイメージを作成します。 方法については、クラウドプロバイダーのドキュメントを参照してください。
クラウドプロファイルの構成
クラウドプロファイルは、TeamCity が TeamCity エージェントがインストールされた仮想マシンをオンデマンドで開始するための設定のコレクションです。 クラウドプロファイルは、 プロジェクト設定 の クラウドプロファイル セクションで構成されます。 Amazon EC2、 Kubernetes、 vSphere プロファイルの詳細な手順を参照してください。
コストの見積もり
クラウドプロバイダーの価格が適用されます。 料金は、TeamCity をデプロイするために実装された特定の構成によって異なる場合があることに注意してください。 予想外の請求をできるだけ早く発見し防止するために、設定とクラウドアカウントデータを定期的に確認することをお勧めします。
トラフィック量と必要なサーバーおよびエージェントマシンの特性は、TeamCity セットアップと実行されるビルドの性質に大きく依存することに注意してください。
トラフィックの見積もり
TeamCity 関連のトラフィックを見積もる際に役立つポイントをいくつか示します:
TeamCity サーバーがエージェントと同じリージョンまたはアフィニティグループ内にない場合、サーバーとエージェント間のトラフィックには、プロバイダーが課す通常の外部トラフィック料金が適用されます。 トラフィックを見積もる際は、TeamCity に関連するトラフィックには多くの種類があることに注意してください (以下の不完全なリストを参照)。
サーバーから開始された外部接続 は:
VCS サーバー
E メールサーバー
Maven リポジトリ
NuGet リポジトリ
サーバーから開始された内部接続 は:
TeamCity エージェント (ステータスの確認、コマンドの送信、スレッドダンプなどの情報の取得など)
エージェントから開始された外部接続 は:
VCS サーバー (エージェント側のチェックアウトの場合)
Maven リポジトリ
NuGet リポジトリ
ビルドプロセス自体から実行される接続
エージェントから開始された内部接続 は:
TeamCity サーバー (サーバー側チェックアウトまたは個人用ビルドの場合のビルドソースの取得、アーティファクトのダウンロードなど)
サーバーが使用する通常の接続 は:
ウェブブラウザー
IDE プラグイン
実行コスト
クラウドプロバイダーは仮想マシンの稼働時間に基づいてコストを計算するため、通常のビルド期間に応じてタイムアウト設定を調整することをお勧めします。 これにより、仮想マシンの稼働時間が短縮されます。 また、すべてのビルドに実行タイムアウトを設定して、ビルドがハングしてもペイロードなしでオーバータイムインスタンスが実行されないようにすることを強くお勧めします。