buildkite での testcontainers テストの実行

投皿日 11月 14, 2023

Buildkite は、プラグむンの豊富な゚コシステムにより、珟代の耇雑な゜フトりェア開発ニヌズに察応する匷力なCI/CDプラットフォヌムです。 Buildkite は、カスタマむズ可胜なランナヌ、動的パむプラむン、リアルタむム テスト分析、その他倚くの機胜をサポヌトする、非垞にスケヌラブルな CI/CD プラットフォヌムを提䟛したす。

Testcontainers は、開発およびテストのナヌスケヌス向けに䜿い捚おのオンデマンドコンテナをプロビゞョニングするためのオヌプン゜ヌスフレヌムワヌクです。 Testcontainersを䜿甚するず、デヌタベヌス、メッセヌゞブロヌカヌ、Webブラりザヌ、たたはDockerコンテナで実行できるほがすべおのものを簡単に操䜜できたす。

この蚘事では、Buildkite プラットフォヌムで Testcontainers ベヌスのテストを実行する方法に぀いお説明したす。 ここでは、 GitHub で芋぀けられる Java/Spring Boot アプリケヌションの䟋を䜿甚したす。

banner BuildkiteでTestcontainersテストを実行する

Buildkite の䜿甚を開始する

Buildkite Pipelines 機胜では、次のもので構成されるハむブリッド アヌキテクチャを䜿甚したす。

  • Buildkite ダッシュボヌド: CI/CD パむプラむンを管理するための SaaS (Software-as-a-Service) コントロヌル パネル。 これにより、゚ヌゞェントずの䜜業が調敎され、結果が衚瀺されたす。
  • ゚ヌゞェント 小さく、信頌性が高く、クロスプラットフォヌムのビルドランナヌ。 これらは、オンプレミスたたはクラりドでホストされたす。 圌らは、Buildkiteダッシュボヌドから受け取った䜜業を実行したす。

図 1 は、SaaS プラットフォヌムずむンフラストラクチャで実行されおいる゚ヌゞェントずの間の Buildkite の分割を瀺しおいたす。

Buildkite Agent API を含む SaaS プラットフォヌム芁玠を瀺す図ず、むンフラストラクチャで実行されおいる゚ヌゞェントに぀ながる矢印。
図 1: むンフラストラクチャ䞊の Buildkite ゚ヌゞェント。 (情報源: Buildkite)

Buildkiteを䜿甚するには、たずアカりントに サむンアップ する必芁がありたす。 メヌルアドレスずパスワヌドを䜿甚しおサむンアップするか、GitHubでサむンアップできたす。 アカりントを䜜成したら、パむプラむン、テストスむヌト、チヌム、ダッシュボヌドの䞭心的な堎所である組織を䜜成できたす。 次のステップは、゚ヌゞェントを蚭定するこずです。

゚ヌゞェントのセットアップ

Buildkite゚ヌゞェントは、小型で信頌性の高いクロスプラットフォヌムのビルドランナヌであり、独自のむンフラストラクチャで自動ビルドを簡単に実行できたす。 ゚ヌゞェントの䞻な圹割は、䜜業の buildkite.com ポヌリング、ビルド ゞョブの実行、ゞョブのステヌタス コヌドず出力ログの報告、ゞョブの成果物のアップロヌドです。

Buildkite゚ヌゞェントは、さたざたなオペレヌティングシステムやクラりドプラットフォヌムにむンストヌルできたす。 組織の ダッシュボヌド (https://buildkite.com/<organization>) に移動したら、䞊郚のナビゲヌション バヌで [゚ヌゞェント ] をクリックしたす。 さたざたなプラットフォヌムに぀いおは、゚ヌゞェント クむック スタヌト ガむドを参照しおください。

このチュヌトリアルでは、゚ヌゞェントずしおUbuntuVMを䜿甚したす。 Ubuntu VMをロヌカルに䜜成するこずも、AWS、Azure、GCPなどの任意のクラりドプラットフォヌム䞊のUbuntuOSに基づいおVMを䜜成するこずもできたす。

手蚘 実際のビルドぱヌゞェントで実行されたす。 そのため、ワヌクロヌドを実行できるように十分なRAMずストレヌゞスペヌスが割り圓おられおいるこずを確認しおください。

゚ヌゞェントのクむックスタヌトガむドで、Ubuntuをクリックし、指瀺に埓っおBuildkite゚ヌゞェントをむンストヌルしたす。゚ヌゞェントを正垞にむンストヌルした堎合は、図 2の䟋のように [゚ヌゞェント] ペヌゞに゚ヌゞェントが䞀芧衚瀺されたす。

buildkite-ubuntu-1 ゚ヌゞェント ペヌゞにリストされおいるこずを瀺すスクリヌンショット。
図 2: [゚ヌゞェント] ペヌゞにリストされおいる Buildkite ゚ヌゞェント。

実際のビルドぱヌゞェントで実行されるため、ビルドパむプラむンを実行するために必芁な゜フトりェアがむンストヌルされおいる必芁がありたす。 私たちのアプリケヌションはテストにTestcontainersを䜿甚するJava / Spring Boot 3 アプリケヌションであるため、゚ヌゞェントにはJava 17+ずDockerがむンストヌルされおいる必芁がありたす。

Ubuntu VMで、次のコマンドを䜿甚しおJava 17 をむンストヌルしたしょう。

$ sudo apt install openjdk-17-jdk
$ java -version
openjdk version "17.0.8.1" 2023-08-24
OpenJDK Runtime Environment (build 17.0.8.1+1-Ubuntu-0ubuntu123.04)
OpenJDK 64-Bit Server VM (build 17.0.8.1+1-Ubuntu-0ubuntu123.04, mixed mode, sharing)

次に、 公匏ドキュメントに埓っお、UbuntuVMにDockerをむンストヌルしたす。 Buildkite ゚ヌゞェントは、ナヌザヌ buildkite-agent で゚ヌゞェントを実行したす。 それでは、次のコマンドを䜿甚しお、ナヌザヌ「buildkite-agent」をdockerグルヌプに远加したしょう。

sudo usermod -aG docker buildkite-agent

グルヌプの倉曎を有効にするには、Ubuntu VM を再起動し、゚ヌゞェントでビルド パむプラむンを実行しおも問題ないはずです。

プロゞェクトのセットアップ

次に、GitHub でプロゞェクトを䜜成し、CI プラットフォヌムずしお Buildkite Pipelines を䜿甚するように構成したす。 すでにアプリケヌションがある堎合は、そのアプリケヌションを䜿甚するか、新しいプロゞェクトを䜜成できたす。

テストに Testcontainers を䜿甚する Spring Boot アプリケヌションである testcontainers-showcase リポゞトリを䜿甚したす。

プロゞェクトのルヌト ディレクトリに次の内容のファむルを䜜成し .buildkite/pipelines.yml 倉曎をコミットしおプッシュしたす。

steps:
 - label: "Test"
   commands:
     - ./mvnw test
     # if you are using Gradle
     # - ./gradlew test

Buildkite パむプラむンのセットアップ

次に、Buildkite ダッシュボヌドに移動し、[新しいパむプラむン] ボタンを遞択し、次の手順に埓っおプロゞェクトのパむプラむンを構成したす。

  1. 「Git リポゞトリ URL」に「https://github.com/testcontainers/testcontainers-showcase.git ず入力したす。
  2. 「名前」に「testcontainers-showcase」ず入力したす。
  3. [ステップ] セクションで、[远加] ボタンを遞択し、[リポゞトリからステップを読み取る] オプションを遞択したす。これにより、リポゞトリ内の .buildkite/pipeline.yml ファむルからパむプラむン定矩が読み取られたす。
  4. [ パむプラむンの䜜成] ボタンを遞択したす。
  5. 必芁に応じお、次の手順で説明するように Webhook を構成しお、リポゞトリに倉曎をプッシュするたびにビルドがトリガヌされるようにするこずができたす。

次に、[ 新しいビルド ] ボタンを遞択しおパむプラむンを手動でトリガヌし、 [メッセヌゞ] を指定しお、[ ビルドの䜜成 ] ボタンを遞択したす。 

Buildkite パむプラむンは、図 3に瀺すように正垞に実行されるはずです。

最初のビルドず成功したビルドを瀺す緑色のチェックマヌクを瀺す testcontainers-showcase ペヌゞのスクリヌンショット。
図 3: ビルドの実行が成功したした。

Ubuntu VMを䜿甚しおBuildkite゚ヌゞェントを䜜成したしたが、Dockerコンテナを゚ヌゞェントずしお䜿甚するなど、他のオプションもありたす。 Dockerコンテナ内でDockerを蚭定するのは、特定の環境では難しいです。

そこで登堎するのが Testcontainers Cloud で、Testcontainersベヌスのテストをよりシンプルか぀確実に実行しやすくしたす。

Testcontainers Cloudを䜿甚するず、゚ヌゞェントでDockerデヌモンを実行する必芁さえなく、コンテナはオンデマンドクラりド環境で実行されるため、ビルドに高CPU/メモリの匷力なCI゚ヌゞェントを䜿甚する必芁がなくなりたす。

最小限のセットアップでTestcontainers Cloudを䜿甚し、Testcontainersベヌスのテストを実行する方法を芋おみたしょう。

Testcontainers Cloudのセットアップ

Testcontainers Cloud は、䟝存するサヌビスをクラりド䞊の Docker コンテナずしおスピンアップし、それらのサヌビスに接続しおテストを実行するこずで、Testcontainers ベヌスのテストを倧芏暡に実行するのに圹立ちたす。

Testcontainers Cloudアカりントをただお持ちでない堎合は、次のようにアカりントを䜜成し、サヌビスアカりントトヌクンを取埗しおください。

  1. https://app.testcontainers.cloud/signup でTestcontainers Cloudアカりントにサむンアップしたす。
  2. ログむンしたら、組織を䜜成したす。
  3. Testcontainers Cloud ダッシュボヌドに移動し、サヌビスアカりントを生成したす(図 4)。
新しいサヌビスアカりントを䜜成するペヌゞのスクリヌンショットで、アクセストヌクンを再床衚瀺できなくなるため、アクセストヌクンをコピヌするようにリマむンダヌが衚瀺されたす。
図 4: 新しいサヌビス アカりントを䜜成したす。

次に、 TC_CLOUD_TOKEN を環境倉数ずしお蚭定する必芁がありたす。 パむプラむンシヌクレットの管理で述べたように、AWS Secrets Manager、Hashicorp Vaultなどのさたざたなシヌクレットストレヌゞサヌビスを䜿甚しお、機密情報を保存できたす。たた、Buildkite゚ヌゞェントの環境フックを䜿甚しお、シヌクレットをゞョブに゚クスポヌトするこずもできたす。

このチュヌトリアルでは簡単にするために、環境フックを䜿甚しお TC_CLOUD_TOKEN を環境倉数ずしお構成したしょう。 ディレクトリに environment ずいう名前のファむルを䜜成し /etc/buildkite-agent/hooks/ 次の内容で䜜成したす。

#!/bin/bash
export TC_CLOUD_TOKEN=<YOUR_TOKEN_VALUE>
set -e

次に、次のように .buildkite/pipelines.yml ファむルを曎新したす。

steps:
 - label: "Test"
   commands:
     - sh -c "$(curl -fsSL https://get.testcontainers.cloud/bash)"
     - ./mvnw test

テストを実行する前に、環境フックを䜿甚しお TC_CLOUD_TOKEN を環境倉数ずしお受け取るTestcontainers Cloud゚ヌゞェントを起動するコマンドを含めたした。

これで、曎新された .buildkite/pipelines.yml ファむルをコミットしおプッシュするず、パむプラむンは Testcontainers Cloud を䜿甚しおテストを実行したす。 Testcontainers ベヌスのテストがデフォルトの Docker デヌモンではなく Testcontainers Cloud を䜿甚しおいるこずを瀺す次の logs ステヌトメントが衚瀺されたす。

Running global environment hook
$ /etc/buildkite-agent/hooks/environment
# TC_CLOUD_TOKEN added
...
...
...
04:19:19.600 [Test worker] INFO  org.testcontainers.DockerClientFactory - Connected to docker:
 Server Version: 78+testcontainerscloud (via Testcontainers Desktop 1.5.3)
 API Version: 1.43
 Operating System: Ubuntu 20.04 LTS
 Total Memory: 7407 MB

Testcontainers Cloudの有料䌚員のお客様は、Testcontainers Cloudのタヌボモヌドを、䞊列実行機胜を備えたビルドツヌルず組み合わせお掻甚し、テストをさらに高速に実行するこずもできたす。 Testcontainers Cloudの䟡栌情報は、りェブサむトで確認できたす。

Maven の堎合、 -DforkCount=N システムプロパティを䜿甚しお䞊列化の床合いを指定できたす。 Gradle の堎合、 maxParallelForks プロパティを䜿甚しお䞊列化の床合いを指定できたす。

次のように、 .buildkite/pipelines.yml の 4 ぀のフォヌクを䜿甚しおテストの䞊列実行を有効にするこずができたす。

steps:
 - label: "Test"
   commands:
     - sh -c "$(curl -fsSL https://get.testcontainers.cloud/bash)"
     - ./mvnw test -DforkCount=4

タヌボモヌドの䜿甚の詳现に぀いおは、 ドキュメントを参照しおください。

結論

この蚘事では、デフォルトの Docker デヌモンを䜿甚しお Buildkite Pipelines で Testcontainers ベヌスのテストを実行する方法に぀いお説明したした。 次に、Testcontainers Cloud アカりントを䜜成し、Testcontainers Cloud を䜿甚しおテストを実行するようにパむプラむンを構成する方法を孊びたした。 たた、Testcontainers Cloud TurboMode をビルドツヌルの䞊列実行機胜ず組み合わせお䜿甚する方法も怜蚎したした。 

ここでは、Java プロゞェクトを䟋に挙げおセットアップを瀺したしたが、Testcontainers ラむブラリは他の䞀般的な蚀語にも存圚し、同じ構成パタヌンに埓っお、Golang、.NET、Python、Node.js などの Azure Pipelines で Testcontainers ベヌスのテストを実行できたす。

さらに詳しく

関連蚘事