TeamCity 2020.2 ヘルプ

Amazon EC2 用の TeamCity のセットアップ

TeamCity Amazon EC2 統合により、Amazon アカウントで TeamCity を構成し、キューに入れられたビルドに基づいて TeamCity エージェントでオンデマンドでイメージを開始および停止できます。

他のクラウドソリューションとの統合が可能です

概要

マシンイメージは、起動時に TeamCity エージェントを開始するように事前設定されていることが前提となっています(詳細を参照)。

クラウドプロファイルが TeamCity で 1 つまたは複数のイメージで構成されると、TeamCity はすべての新しいイメージのテストを開始して、それらのエージェントについて学習します。
エージェントが接続されると、TeamCity はそれらのパラメーターを保存して、ビルド構成とエージェントの互換性を正しく処理できるようにします。

キューに入れられたビルドごとに、TeamCity は最初に、通常の非クラウドエージェントの 1 つでビルドを開始しようとします。使用可能な通常のエージェントがない場合、TeamCity は互換性のあるエージェントと一致するクラウドイメージを見つけ、そのイメージの新しいインスタンスを開始します。TeamCity は、クラウドプロファイルで設定された実行中のインスタンスの制限を超えないようにします。

TeamCity によって開始されたクラウドインスタンスからエージェントが接続されると、自動的に承認されます(利用可能なエージェントライセンスがある場合)。その後、エージェントは通常のエージェントとして処理されます。
クラウドプロファイルで実行タイムアウトが構成されていて、そのタイムアウトに達した場合、インスタンスは終了します(または、既存の Amazon インスタンスがイメージソースとして選択されている場合は停止します)。

インスタンスが終了 / 停止すると、その切断されたエージェントは許可エージェントリストから削除され、システムから削除されます。

TeamCity は、Amazon EC2 スポットインスタンススポットフリートをサポートしています。

構成

Amazon EC2 と EC2 タスクを実行する機能を理解することは、TeamCity Amazon EC2 統合を構成および使用するための前提条件です。

TeamCity EC2 の基本セットアップには以下が含まれます。

  • TeamCity エージェントがインストールされた Amazon EC2 イメージ(AMI)の準備

  • TeamCity サーバーでの EC2 統合の構成

クラウドプロファイル設定でカスタムサーバー URL が指定されていない場合、エージェントがサーバーへの接続に使用するため、管理 | グローバル設定ページで指定されたサーバー URL が正しいことを確認してください。

必要な IAM アクセス許可

TeamCity では、Amazon EC2 リソースに対して次の権限が必要です。

  • ec2:Describe*
  • ec2:StartInstances
  • ec2:StopInstances
  • ec2:TerminateInstances
  • ec2:RebootInstances
  • ec2:RunInstances
  • ec2:ModifyInstanceAttribute
  • ec2:*Tags

スポットインスタンスを使用するには、次の追加の権限が必要です。

  • ec2:RequestSpotInstances
  • ec2:CancelSpotInstanceRequests

スポットフリートを使用するには、次の追加の権限が必要です。

  • ec2:RequestSpotFleet
  • ec2:DescribeSpotFleetRequests
  • ec2:CancelSpotFleetRequests

IAM ロール(AMI-s から複製されたインスタンスにのみ適用可能)でインスタンスを起動するには、次の追加のアクセス許可が必要です。

  • iam:ListInstanceProfiles
  • iam:PassRole

カスタム IAM ポリシー定義の例(指定された IP アドレスからのすべての EC2 操作を許可します):

{ "Version": "2012-10-17", "Statement": [ { "Sid": "1", "Effect": "Allow", "Action": "ec2:*", "Condition": { "IpAddress": { "aws:SourceIp": "<TeamCity server IP address>" } }, "Resource": "*" } ] }

オプションの権限

エージェントインスタンスに IAM ロールを設定する権限については、以下のセクションを参照してください。

Amazon Web サイトで Linux(英語) および Windows(英語) のポリシー例に関する情報を表示します。

TeamCity エージェントがインストールされたイメージの準備

TeamCity クラウド統合に使用できるイメージの要件は次のとおりです。

  • TeamCity エージェントを正しくインストールする必要があります。

  • TeamCity エージェントはマシンの起動時に起動するはずです。

  • buildAgent.properties はそのままにしておくことができます。 serverUrl , name、および authorizationToken プロパティは空にすることも、任意の値に設定することもできます。TeamCity がインスタンスを開始するとき、それらは無視されます。

これらの要件が満たされている場合、通常の TeamCity エージェントのインストールとクラウドプロバイダーイメージのバンドル手順が適用されます。

サーバーとエージェントマシン間の接続を安全にする必要がある場合は、起動時にサーバーへの安全なトンネル(VPN など)を確立して、TeamCity エージェントがセキュア経由でデータを受信するように、エージェントマシンを設定する必要があります。チャネル。

推奨イメージ(Amazon AMI など)の準備手順:

  1. 既存の汎用イメージのいずれかを選択します。

  2. イメージを開始します。

  3. 実行中のインスタンスを設定します。
    • ビルドエージェントをインストールして構成します。
      • conf/buildAgent.properties でサーバー名とエージェント名を構成します。これは、イメージが TeamCity によって開始される場合はオプションですが、エージェントが正しく構成されているかどうかをテストできます。

      • 通常、conf/buildAgent.propertiestempDir および workDir を指定して、非システムドライブ(Windows の場合は d: )を使用することは理にかなっています。

    • マシンにビルドに必要な追加のソフトウェアをインストールします。

    • エージェントを実行し、正常に動作し、必要なすべてのビルド構成と互換性があることなどを確認します。

    • エージェントがマシンのブート時に開始されるようにシステムを構成します(マシンのブート時に TeamCity サーバーにアクセスできることを確認します)。

    • Windows の場合は、Windows エージェントの追加構成も参照してください

  4. マシンを再起動し、エージェントがサーバーに正常に接続することを確認して、セットアップをテストします。

  5. バンドル用のイメージを準備します。
    • システム内の一時 / 履歴情報を削除します。

    • エージェントを停止する (Windows ではサービスを停止しますが、自動起動タイプのままにします)

    • エージェントホームのコンテンツ logs および temp ディレクトリを削除します (オプション)

    • <Agent Home>/conf/amazon-* ファイルを削除します (オプション)

    • config/buildAgent.properties を変更して、プロパティを削除します: name , serverUrl , authorizationToken (オプション)。 serverUrl は EC2 統合プラグインから削除できます。他のプラグインでは、プラグインが存在し、正しい値に設定されている必要があります。

  6. 実行中のインスタンスを停止して、そこから新しいイメージを作成します(または、既存の Amazon インスタンスがイメージソースとして選択されている場合は単に停止します)。

Windows エージェントの追加構成

WindowsEC2API との適切な TeamCity エージェント通信(追加のドライブへのアクセスを含む)を確保するには、AmazonSSMAgent(英語) または EC2Launch / EC2Config(英語) サービス(AWS インフラストラクチャの使用に関してマシンが完全に初期化されることを保証するサービス)に TeamCity ビルドエージェントサービスからの依存関係を追加します)。これは、たとえば、レジストリ(英語)を介して、または sc config(英語) (たとえば、sc config TCBuildAgent depend=EC2Config)を使用して実行できます。
または、「自動(遅延開始)」サービス開始モードを使用することもできます。

Windows Server2016 に基づいたイメージに関する重要な注意事項 :

ネットワーク設定のバグ(英語)のため、インスタンスメタデータはデフォルトでは使用できません。これは、TeamCity エージェントサービスがそのプロパティを取得できず、クラウド統合が機能しないことを意味します(エージェントがサーバーに接続しないか、自動的に承認されません)。この課題を修正するには、次の手順を実行します。

  1. 最新の EC2Config(英語) をインストールします。

  2. コマンド sc config TCBuildAgent depend=Ec2Config/AmazonSSMAgent を使用して、EC2ConfigAmazonSSMAgent の両方で TCBuildAgent サービスの依存関係を設定します。

エージェントの自動アップグレードに関する注意

TeamCity エージェントは、サーバー上のエージェントプラグインのディストリビューションが変更されるたびに自動アップグレードされます(たとえば、TeamCity のアップグレード後)。エージェントの起動時間を短縮する場合は、エージェントプラグインが自動更新された後にエージェント AMI を再バンドルすることができます。

Amazon EC2 クラウドプロファイルの構成

プロジェクト設定クラウドプロファイルセクションで Amazon EC2 エージェントクラウドプロファイルを構成できます。

カスタムイメージ名

イメージカスタムイメージ名パラメーターの値は、このイメージを使用するすべての TeamCity エージェントの一意の識別子として機能します。例:この値は、エージェント | クラウドタブのクラウドプロファイルログのエージェント ID にプレフィックスとして追加されます。

クラウドプロファイルの各イメージには、一意のカスタム名が必要です。

IAM プロファイル

Amazon EC2 インスタンスとして起動されたビルドエージェントで IAM(Identity and Access Management)プロファイルを使用できます。これには、提供された AWS アカウントに次のアクセス許可が必要です。

  • iam:ListInstanceProfiles
  • iam:PassRole

IAM プロファイルは AmazonEC2 で事前設定(英語)する必要があります。TeamCity Web UI では、IAM プロファイルドロップダウンメニューを使用してロールを選択できます。新しく起動された EC2 インスタンスはすべて、選択された IAM ロール(英語)を引き継ぎます。

Amazon EC2 スポットインスタンスのサポート

TeamCity は Amazon EC2 スポットインスタンス(英語)をサポートしており、提案された価格が現在のスポット価格を超えている限り、未使用の EC2 容量に入札して使用することができます。

クラウドプロファイル設定で AmazonEC2 イメージのスポットインスタンスを有効にできます。イメージの追加をクリックしてソースを選択するか、既存のイメージを編集します。スポットインスタンスオプションを選択し、入札価格を指定して、イメージを保存します。
入札価格が指定されていない場合は、デフォルトのオンデマンド価格が使用されます。

TeamCity は、クラウドプロファイルが保存されるとすぐにスポットインスタンスを起動します。インスタンスを起動できない場合(たとえば、利用可能な容量がない場合、または入札価格が Amazon の現在の最低スポット価格より低い場合)、TeamCity は、1 分に 1 回、起動試行を繰り返します。このエージェントで実行できるキュービルドです。

Amazon EC2 Spot Fleet のサポート

スポットフリートは、事前定義された基準に基づいて起動されるスポットインスタンスのセットです。通常のスポットインスタンスの代わりにスポットフリートをリクエストできます。TeamCity は、指定したアベイラビリティーゾーンで最低価格のスポットインスタンスを選択して起動できます。

プロジェクトでスポットフリートを使用するには:

  1. AWS マネジメントコンソール(英語)で、スポットフリートリクエストを生成します。

    • インスタンス | スポットリクエスト | スポットインスタンスのリクエストに移動します。

    • 必要な AMI、最小計算単位、アベイラビリティーゾーン、およびその他のリクエストの詳細を指定します。

    • JSON 構成をクリックして、スポットフリート構成パラメーターを含む JSON ファイルをダウンロードします。 SpotFleetRequestConfigData (英語) クラスのフィールドのみがサポートされていることに注意してください。

    Spot fleet config generation button in Amazon

  2. TeamCity で、スポットプロファイルをクラウドプロファイルに追加します。

    • クラウドプロファイルページでイメージの追加をクリックします。

    • ソースドロップダウンメニューで、スポットインスタンスフリートを選択します。フリートに必要なスポットインスタンスの最大数(最大インスタンス)を入力し、エージェントプールを選択します

    • Spot Fleet Config フィールドに、AWS 管理コンソールで生成された JSON 構成ファイルを挿入します。

    Spot fleet configuration in TeamCity

    • イメージを保存します。

TeamCity は、イメージを実行するために、スポットフリート構成で指定された割り当て戦略に一致するスポットインスタンスを起動します。

Amazon EC2 Launch Templates のサポート

TeamCity は、クラウドインスタンスの Amazon EC2 起動テンプレート(英語)をサポートします。起動テンプレートを使用すると、すべての新しいインスタンスに対して一度定義した起動仕様を再利用できるため、新しいインスタンスが要求されるたびに起動設定を記述する必要がなくなります。

クラウドプロファイルが Amazon サーバーに接続されている場合、TeamCity はこのサーバーで使用可能な起動テンプレートを自動的に検出します。イメージを追加するときは、ソースとして必要なテンプレートを選択し、そのバージョンを指定すると、TeamCity はテンプレートパラメーターに基づいてインスタンスを要求します。オプションで、起動するインスタンスの数を制限して、特定のエージェントプールに割り当てることもできます。

テンプレートのデフォルト / 最新バージョンがサーバー上で更新されると、TeamCity はこれらの変更を検出し、実行中のインスタンスを更新します。

Amazon EBS 最適化インスタンス

TeamCity での EBS 最適化(英語)の動作は、EC2 コンソールで提供される動作に似ています。Amazon クラウドプロファイルのイメージを構成する場合、インスタンスタイプの対応するボックスを使用して最適化を設定できます。ご了承ください

  • c4.* , d2.* および m4.* の EBS 最適化はデフォルトでオンになっています (non-configurable)

  • EBS 最適化は、他のインスタンスタイプではデフォルトでオフになっており、それをサポートするインスタンスではオンにすることができます ( c3.xlarge など)

TeamCity で起動されたインスタンスのタグ付け

TeamCity によって起動されたインスタンスにタグを付けるには、次の要件を満たす必要があります。

タグ付け権限がない場合でも、TeamCity はタグが適用されていない Amazon AMI および EBS イメージを起動します。Amazon EC2 スポットインスタンスは起動されません。

TeamCity を使用すると、作成されたインスタンスを <server UUID>:-<cloud profile ID>:-<image reference> を含む teamcity:TeamcityData タグでマークすることにより、インスタンスの起動情報を取得できます。このタグは EC2 との TeamCity 統合に必要であり、削除しないでください

カスタムタグは EC2 クラウドエージェントインスタンスに適用できます。クラウドプロファイル設定を構成する場合、イメージの追加 / イメージの編集ダイアログでインスタンスタグ:フィールドを使用して、<key1>=<value1>,<key2>=<value2> の形式でタグを指定します。Amazon タグの制限(英語)を考慮する必要があります。

タグ値に等号(=)を使用する場合、エスケープする必要はありません。たとえば、文字列 extraParam=name=John<key=extraParam> と値 <name=John>. に解析されます

インスタンス依存リソースのタグ付け

Amazon EC2 インスタンスを起動すると、TeamCity は作成されたインスタンスに関連付けられたすべてのリソース(ボリュームやネットワークアダプターなど)にタグを付けます。これは、インスタンスの全体的なコストを評価する際に重要です(ストレージドライブのタイプとサイズ、I/O 操作(標準ドライブの場合)、ネットワーク(転送)など。

複数の TeamCity サーバー間で単一の EBS インスタンスを共有する

上記のように、TeamCity は、起動するすべてのインスタンスに、サーバー、クラウドプロファイル、ソース(AMI または EBS インスタンス)を表す teamcity:TeamcityData タグを付けます。複数の TeamCity サーバーが同じ EBS インスタンスを使用しようとすると、2 番目のサーバーは「インスタンスは別の TeamCity サーバーによって使用されています。起動 / 停止できません」というメッセージが表示されます。他の TeamCity サーバーがこのインスタンスで動作していないことが確実な場合は、teamcity:TeamcityData タグを削除すると、インスタンスがすべての TeamCity サーバーで再び使用可能になります。

新しいインスタンスタイプ

Amazon はすべてのインスタンスタイプを取得するための堅牢な API メソッドを提供していないため、Amazon 統合は AWS SDK の定期的な更新に依存して新しいインスタンスタイプを利用可能にします。

ただし、待ちたくない場合は回避策があります。新しいインスタンスタイプを登録するには、teamcity.ec2.instance.types 内部プロパティを使用し、「、」で区切られた新しいインスタンスタイプを使用します

プロキシ設定

TeamCity サーバーがプロキシを使用して AWS API エンドポイントに接続する必要がある場合、Amazon AWS アドレスに接続するように次のサーバー内部プロパティを設定します。

  • teamcity.http.proxy.host.ec2 –プロキシサーバーのホスト名

  • teamcity.http.proxy.port.ec2 –プロキシサーバーポート

プロキシサーバー認証の場合:

  • teamcity.http.proxy.user.ec2 –プロキシアクセスユーザー名

  • teamcity.http.proxy.password.ec2 –プロキシアクセスユーザーパスワード

NTML 認証の場合:

  • teamcity.http.proxy.domain.ec2 – NTLM 認証用のプロキシユーザードメイン

  • teamcity.http.proxy.workstation.ec2 – NTLM 認証用のプロキシアクセスワークステーション

カスタムスクリプト

インスタンスの開始時にカスタムスクリプトを実行することができます(AMI からクローンされたインスタンスにのみ適用可能)。
Amazon Web サイトでは、Linux(英語) および Windows(英語) のスクリプト形式について詳しく説明しています。

EC2 コストの引用

通常の Amazon EC2 の価格設定が適用されます。Amazon の料金は、TeamCity をデプロイするために実装された特定の構成に依存する場合があることに注意してください。予期しない請求をできるだけ早く発見して防止するために、設定と Amazon アカウントデータを定期的に確認することをお勧めします。

トラフィック量と必要なサーバーおよびエージェントマシンの特性は、TeamCity のセットアップと実行されるビルドの性質に大きく依存することに注意してください。TeamCity のハードウェア要件の推定も参照してください。

トラフィック引用

TeamCity 関連のトラフィックを推定するのに役立ついくつかのポイントがあります。

  • TeamCity サーバーが、エージェントの TeamCity EC2 設定で構成された同じ EC2 リージョンまたはアベイラビリティーゾーン内にない場合、サーバーとエージェント間のトラフィックは、通常の Amazon EC2 外部トラフィック料金の対象となります。

  • トラフィックを推定する場合、TeamCity に関連するトラフィックには多くのタイプがあることに留意してください(以下の完全でないリストを参照してください)。

サーバーが発信した外部接続:

  • VCS サーバー

  • メールサーバーと Jabber サーバー

  • Maven リポジトリ

サーバーが発信した内部接続:

  • TeamCity エージェント (ステータスの確認、コマンドの送信、スレッドダンプなどの情報の取得など)

エージェントが発信した外部接続:

  • VCS サーバー (エージェント側のチェックアウトの場合)

  • Maven リポジトリ

  • ビルドプロセス自体から実行された接続

エージェントが発信した内部接続:

  • TeamCity サーバー (サーバー側のチェックアウトまたは個人用ビルドの場合はビルドソースを取得する、アーティファクトをダウンロードするなど)

サーバーが提供する通常の接続:

  • ウェブブラウザー

  • IDE プラグイン

稼働時間コスト

Amazon はマシンのアップタイムを最も近い 1 時間に切り上げるため、通常のビルドの長さに応じて、TeamCity クラウド統合設定の EC2 イメージ設定のタイムアウト設定を調整します。

また、すべてのビルドの実行タイムアウトを設定して、ビルドがハングしてもペイロードなしで長時間インスタンスが実行されないようにすることを強くお勧めします。