TeamCity + Docker による継続的インテグレーション

TeamCity ではパイプラインの各ステップに Docker を使用しながら、あらゆる規模と複雑度のプロジェクトで CI/CD を自動化できます。

Docker 環境でビルド

自分のマシンでデバッグしたコードが別の環境で動作せずに苛立ちを感じたことはありませんか?TeamCity では Docker でビルドとテストを実行できるため、アプリケーションが特定のシステムに縛られることはありません。そのため、QA のマシンからクラウドの本番インスタンスまで、あらゆる場所でアプリケーションの正常な動作を確保できます。

大規模な Docker イメージのビルドと管理

拡張可能で保守可能な CI/CD インフラストラクチャの構築方法をお探しですか?TeamCity ならビルドパラメーターを使って Docker コマンドをカスタマイズし、テンプレートを使用して集約されたパイプラインをセットアップし、使用しなくなった Docker イメージからのビルドエージェントと Docker レジストリのクリーンアップを自動化できます。

コンテナーサービスで統合テストを実行

複数の異なるアプリコンポーネントの連携動作をテストしたり、特定の環境でアプリをテストしたりする必要がありますか?TeamCity では、信頼性が高く再現可能な方法で Docker コンテナーを起動して統合テストを実行し、プロセスの最後でコンテナーを安全に終了できます。

Docker の CI/CD パイプラインへの統合

TeamCity は Docker を使用するすべてのソフトウェア開発ワークフローをサポートしており、それらを高速化できます。他の CI/CD ツールはビルド結果に関する二元的な情報(成功または失敗)のみを提供していますが、TeamCity は Docker との緊密な統合により、以下をはじめとするパイプラインに関する包括的な情報を提供します。

  • リアルタイムのビルドログとテスト結果
  • 統計、傾向、およびコード品質チェック
  • プロセスとスレッドのスタックトレース
  • ビルドの破損につながる変更

そのため、ビルドの問題を素早く発見して修正すべき点を把握し、高品質な新機能をより迅速に提供できます。

TeamCity の主な Docker 統合機能

Docker ビルドランナー

Docker ビルドランナーでは、Docker コマンドを実行するビルドステップを追加できます。この機能は特に Docker 引数を動的にカスタマイズする必要がある場合に役立ちます。たとえば、パイプラインの始めの方で定義された特定バージョンのオペレーティングシステムでビルドを実行できます。また、TeamCity にビルドエージェントの Docker イメージのローカルキャッシュを自動的にクリーンアップさせることもできるため、後続のビルドに確実に備えることができます。

詳細については、ドキュメントの「Docker ランナー」セクションをご覧ください。

Docker ラッパー

Docker ラッパーを使うと、TeamCity のビルドステップをホストのオペレーティングシステムとは無関係に Docker コンテナーで実行できるため、一貫した再現可能な結果を得ることができます。TeamCity はビルド中に発生するすべてのイベントを追跡し、リアルタイムレポート、テスト解析、および Docker コンテナー内からのスタックトレースなどのスマートな機能を提供します。

詳細については、ドキュメントの「Docker ラッパー」セクションをご覧ください。

Docker Compose ビルドランナー

Docker Compose ビルドランナーはビルドの始めに Docker コンテナーを起動し、ビルドが完了または停止した後に TeamCity にコンテナーを確実に終了させるために使用されます。コンポーネントがコンテナー化されており、その実行が Docker Compose ファイルを使って記述されている統合テストを実行する場合に主に使用されます。たとえば、TeamCity そのものはバックエンドとして動作するさまざまなデータベースの複数バージョンに対してテストされ、それぞれの統合テストは Docker Compose ビルドランナーを使用して実行されます。

詳細については、ドキュメントの「Docker Compose ランナー」セクションをご覧ください。

Docker サポートビルド機能

Docker サポートビルド機能は、Docker レジストリへのアクセスを管理するために使用されます。この機能はプロジェクトレベルで構成され、Docker Hub、Amazon ECR、JFrog Container Registry などのあらゆる一般的なサービスをサポートするため、さまざまな TeamCity 機能をこれらのサービスと連携させることができます。たとえば、サーバークリーンアップによって古いビルドに関連付けられたデータが削除されると、そのビルドの一部として公開された Docker イメージを削除するように構成できます。

詳細については、ドキュメントの「Docker サポート」セクションをご覧ください。

ユースケース: Docker と継続的インテグレーションによる開発ワークフローの高速化

自分のコンピューターでビルドして実行するバックエンドサービスを実装したとしましょう。そのサービスをローカル環境の外で使用する予定がなくても、いずれはオペレーティングシステム、ビルドツール、サードパーティライブラリなどの条件が変わる可能性があります。完全に静的な環境をローカルマシンで保守することは実際には不可能であり、遅かれ早かれ何らかの要因で動作しなくなるでしょう。

Docker と TeamCity を使えばビルドを完全に再現可能にできるため、依存関係を管理したり、互換性エラーを修正したりする煩わしさはありません。Maven を使用した Java プロジェクトの CI/CD パイプラインは以下のようになります。

TeamCity では VCS にコミットした瞬間から結果を得るまでのビルドやテストに関するリアルタイムレポートを取得できるため、最速のフィードバックループを実現することができます。あらゆる複雑度や規模のプロジェクトをサポートしており、チームがバグを最小限に抑え、機能をより迅速に出荷し、より透明な開発プロセスを確立するのに役立ちます。

シンプルなウェブ UI でコードを書かずに CI/CD パイプラインをセットアップできます。また、Kotlin を使ってパイプラインをプログラムで構成し、複数のプログラミング言語、オペレーティングシステム、およびクラウドプラットフォームを組み合わせた保守可能で再現可能な継続的インテグレーションのセットアップを実装することも可能です。

FAQ: Docker と TeamCity を使った CI/CD

TeamCity と Docker の統合ではどのオペレーティングシステムがサポートされていますか?

TeamCity は Linux、Windows、macOS など、Docker ランタイムをサポートするすべてのプラットフォームの Docker と連携できます。

TeamCity では Docker イメージを作成できますか?

はい。Docker コンテナーでのビルドの実行に加えて、TeamCity ではさまざまな条件に基づいて Docker イメージの作成、Docker レジストリへのプッシュ、削除が可能です。

TeamCity は無料ですか?

はい。TeamCity On-Premises は小規模のプロジェクトに無料で使用可能で、ユーザー数やビルド時間の制限もありません。TeamCity Cloud には 14 日間の無料体験期間が用意されています。どちらのバージョンでも Docker のすべての機能がサポートされています。

TeamCity は Docker コンテナー内でビルドを実行しますか?

TeamCity では、ビルドをマシンで直接実行するか Docker コンテナーを使って実行するかを選択できます。