GitLab Runner: Testcontainersでテストを実行する
このドキュメントはDockerイメージのビルドガイドの一部です。完全なガイドはこちらからご覧いただけます:StackheroランナーとDocker-in-Dockerを活用し、GitLab CI/CDパイプラインから効率的にDockerイメージをビルド&プッシュする方法。
👋 Stackhero ドキュメントへようこそ!
Stackhero では、GitLab Runner cloud のシンプルなソリューションを提供しており、GitLab CI/CD ジョブの実行を効率的かつ手間なく行えます。主な特長は以下の通りです:
- 無制限の CI/CD 分数:パイプラインを必要なだけ何度でも実行でき、分単位の課金や予期しない追加料金はありません。
- 複数のジョブを同時実行:複数のジョブを並列で実行し、開発スピードを向上できます。
- Docker executor と Docker-in-Docker サポート:CI/CD プロセスの一部として、コンテナイメージのビルドやプッシュを簡単に行えます。
- GitLab.com および セルフマネージド GitLab インスタンスの両方にシームレスに対応。
- 高速な NVMe/SSD ストレージを備えたプライベートかつ専用のインフラストラクチャにより、安定した予測可能なビルドパフォーマンスを実現します。
- 🇪🇺 ヨーロッパ および 🇺🇸 USA のリージョンでご利用いただけますので、チームのニーズに合わせて選択可能です。
時間を節約:最初の GitLab Runner を接続し、数分でパイプラインの実行を開始できます!
Testcontainersは、Java、Go、Node.js、Python、.NETなど複数言語で利用できるテスト用ライブラリです。テスト実行中に実際のサービスを一時的なDockerコンテナとして起動します。データベースやメッセージブローカーをモックする代わりに、統合テストが本物のPostgreSQL、MySQL、Redis、Kafkaインスタンスと通信できるようになり、テスト前に作成・終了後に削除されます。特にJavaやSpringプロジェクトで広く利用されています。
TestcontainersはDockerデーモンを必要とするため、上記と同じDocker-in-Docker構成で動作します。追加の変数は不要です。
test:
stage: test
# テストに必要なイメージ(ここではJDK)を指定してください。必ずしもdockerイメージである必要はありません。
image: gradle:jdk21
services:
- name: docker:29-dind
alias: docker
variables:
DOCKER_HOST: "tcp://docker:2375"
DOCKER_TLS_CERTDIR: ""
script:
- gradle test
TestcontainersはDOCKER_HOSTを参照してデーモンを見つけ、起動したコンテナの公開ポートにも同じdockerホスト名でアクセスします。どちらもジョブのネットワーク上で解決されるため、問題なく動作します。
Testcontainersを使うジョブでは
DOCKER_HOSTを必ず設定してください。設定しない場合、TestcontainersはランナーがマウントしたDockerソケットを使おうとし、その後テストコンテナにホストIPアドレスで接続しようとしますが、ジョブからは接続できません。よくある症状は、RyukヘルパーコンテナがWait strategy failed. Container is removedやTimed out waiting for log output matching '.*Started.*'で失敗することです。