コンテナーラッパー
コンテナーラッパー拡張機能を使用すると、指定された Docker/Podman イメージ内でビルドステップを実行できます。 ビルドを実行するエージェントにインストールされているコンテナーマネージャーに応じて、イメージは docker pull または podman プル コマンドによってプルされます。
TeamCity は、コンテナーを匿名でプルすることも (イメージが公開されている場合)、レジストリにログインした後にプルすることもできます (プライベートレジストリの場合、または匿名ダウンロードに対する DockerHub のペナルティを回避する場合)。 イメージをプルする前に TeamCity がレジストリに対して認証する必要がある場合は、次のように Docker レジストリ接続 ビルド機能を構成します:
プロジェクト設定で、サイドバーから 接続 を選択し、 Docker への接続の構成 の指示に従って、新しい Docker または Podman 接続をプロジェクトに追加します。
ビルド構成設定で、前の手順で作成した接続を使用して Docker レジストリ接続 ビルド機能を構成します。
拡張機能は次の ビルドステップで使用できます。
コンテナー設定
ビルドステップ設定の コンテナー設定セクションでは、ビルドステップの実行に使用するイメージを指定できます。 イメージ名以外のすべてのオプションは最初は非表示になっており、この名前を指定した後にのみ表示されます。
- コンテナー内でステップを実行
DockerHub またはその他のレジストリに記載されているイメージのお名前。 TeamCity は指定されたイメージからコンテナーを起動し、このコンテナー内で必要なビルドステップを実行しようとします。 たとえば、`ruby:2.4` は Ruby コンテナー内でバージョン 2.4 のビルドステップを実行します。
ビルドを実行するエージェントに Docker の代わりに Podman がインストールされている場合は、完全なイメージ名 (たとえば、
alpine:latestの代わりにdocker.io/library/alpine:latest) を使用するか、ビルドエージェントマシン上の registries.conf ファイルでレジストリドメインが指定されていることを確認します。 Linux コンテナーレジストリを管理する方法(英語)も参照してください。- イメージプラットフォーム
<任意> (デフォルト)、Linux、または Windows を選択します。 Windows イメージは Podman ではサポートされていないことに注意してください。
- 実行ごとに強制プルする
有効化されている場合、
docker/podman pull <イメージ名>経由でリポジトリからイメージがプルされてから、docker/podman 実行コマンドが送信されます。- 追加の実行引数
docker/podman 実行コマンドに追加オプションを指定できます。 デフォルトの引数は--rmですが、さらに指定できます。 たとえば、カスタムボリュームマッピングを追加します。
コンテナーラッパーの仕組み
TeamCity は、コンテナー内でビルドステップを起動するために次の操作を行います:
ビルドステップの内容をシェルスクリプトでラップします
docker/podman 実行経由でコンテナーを起動するdocker/podman exec経由でこのコンテナー内のシェルスクリプトを実行します
開始されたプロセスの詳細、スクリプトのテキストなどを表示するには、 詳細モードのビルドログを確認します。
コンテナーラッパーは、 ビルドチェックアウトディレクトリや buildAgent/work などの他のエージェントディレクトリへのパスをマップし、これらすべてのディレクトリがビルドエージェント上とラッパー内で同じ場所になるようにします。
プロセス環境に TEAMCITY_DOCKER_NETWORK 環境変数 (前の Docker Compose ビルドステップで設定) が含まれている場合、このネットワークは開始された docker run コマンドに --network スイッチ付きで渡されます。
Linux でのファイル所有権の復元
Docker を使用するビルドエージェントは、コンテナー内で実行される各ステップの最後に chown コマンドを実行して、チェックアウトディレクトリにアクセスするための ビルドエージェント ユーザーの権限を復元します。 このアクションにより、 ルート 所有権で作成された不要になったコンテナーファイルをビルドエージェントが削除できないことに関連する潜在的な問題が防止されます。 Podman を使用するエージェントはこの手順を実行しません。
デフォルトでは、TeamCity エージェントは Docker Hub の busybox イメージを使用して chown コマンドを実行します。 ビルドエージェント.プロパティ ファイルまたは ビルド構成パラメーターの teamcity.internal.docker.busybox パラメーターを使用して、別のイメージ名を指定できます。
環境変数の処理
TeamCity は ビルド構成 からの環境変数を Docker または Podman プロセスに渡しますが、コンテナー環境に関連しない可能性があるため、 ビルドエージェント からの環境変数は渡しません。 渡された環境変数のリストは、ビルドログの 詳細モードで確認できます。
イメージエントリポイントの設定
Docker イメージが ENTRYPOINT (英語) を定義していない場合でも、コマンドラインから ENTRYPOINT を使用してコンテナーを実行できます。
コマンドラインビルドステップを追加します。
実行モードを パラメーター付き実行可能に設定します。
コマンド実行可能フィールドに、ターゲットコンテナー内の
ENTRYPOINTへのフルパスを指定します。Docker の設定では、コンテナーの名前を指定します。
TeamCity は、定義された ENTRYPOINT を使用して指定された Docker イメージを起動します。
コンテナーユーザーの設定
ステップでローカルストレージ上のファイルまたはフォルダーを作成またはアクセスする場合は、十分な権限を持つ正しいユーザーでこれらのアクションが実行されていることを確認してください。 これを行うには、ランナーの 追加の実行引数 に --user=<値> を追加します。
ホスト UID は、 env.UID パラメーター (--user=%env.UID%) を介して取得できます。