Azure Pipelines を䜿甚した Testcontainers テストの実行

投皿日: 9月 20, 2023

Testcontainersは、゚フェメラルDockerコンテナを䜿甚しお、デヌタベヌス、メッセヌゞキュヌ、怜玢゚ンゞンなどの䟝存関係でテストを実行できるテストラむブラリです。 Testcontainers は、プログラム可胜なAPIを䜿甚しおこれらのDockerコンテナのラむフサむクルを管理し、必芁なアプリケヌションの䟝存関係の蚭定をより现かく制埡できたす。

Azure Pipelines は、Azure DevOps ツヌル スむヌトの䞀郚ずしお Microsoft が提䟛するクラりドベヌスの継続的むンテグレヌションおよび継続的デリバリヌ (CI/CD) サヌビスです。 Azure Pipelines は、゜フトりェア開発ず配信プロセスを効率化するために、開発者や DevOps チヌムによっお広く䜿甚されおいたす。

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

玫色の背景に Testcontainers ず Azure のロゎを瀺すバナヌ画像

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

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

テストに Testcontainers を䜿甚する Spring Boot アプリケヌションである testcontainers-showcase リポゞトリを䜿甚したす。 たず、プロゞェクトのルヌト ディレクトリに次の内容の azure-pipelines.yml ファむルを䜜成し、倉曎をコミットしおプッシュしたす。

trigger:
- '*'
pool:
vmImage: ubuntu-latest
steps:
- task: JavaToolInstaller@0
 inputs:
   versionSpec: '17'
   jdkArchitectureOption: 'x64'
   jdkSourceOption: 'PreInstalled'
 displayName: 'SetUp Java'
- script: |
  ./mvnw verify
 displayName: 'Build with Maven'

JavaToolInstallerを䜿甚しお、䜿甚するJDKバヌゞョンを構成しおいたす。この䟋では、Java 17を䜿甚しおいたす。次に、 ./mvnw verify コマンドを実行しお Maven ビルド ツヌルを䜿甚しおテストを実行するステップを構成したした。

Azure Pipelines のセットアップ

次に、 Azure DevOps ペヌゞ に移動し、資栌情報を䜿甚しおログむンしたす。 [New Project (新芏プロゞェクト)] ボタンをクリックし、プロゞェクト名を入力しお [Visibility (可芖性)] を遞択し、[Create (䜜成)] を遞択したす。プロゞェクトが䜜成されたら、 プロゞェクト ビュヌ に移動し、[ パむプラむン] を遞択したす。

プロゞェクトのパむプラむンを構成するには、次の手順に埓いたす。

  1. [新しいパむプラむン] ボタンをクリックし、[GitHub] を遞択したす。 
  2. ただ認蚌されおいない堎合は、GitHub アカりントで認蚌するように求められたす。
  3. パむプラむンを構成するリポゞトリを遞択したす。
  4. azure-pipelines.yml ファむルがない堎合は、リポゞトリ内のビルド構成ファむルに基づいお、暙準パむプラむン構成の䞀芧が提案されたす。リポゞトリにはすでに azure-pipelines.yml ファむルがあるため、パむプラむン゚ディタには azure-pipelines.yml ファむルの内容が事前入力されたす。
  5. [実行] を遞択しおパむプラむンをトリガヌしたす。

Azure Pipelines ランナヌには既に Docker がむンストヌルされお構成されおいるため、テストは正垞に実行されるはずです (図 1)。

成功したゞョブの暪に緑色のチェックマヌクが衚瀺されおいる Azure Pipelines ペヌゞのスクリヌンショット。
図 1: Azure Pipelines で成功したゞョブ。

この図に瀺すように、テストは Azure Pipeline ランナヌの既定の Docker サポヌトを䜿甚しお正垞に実行されたした。 プロゞェクトが倧きくなるに぀れお、テストに䜿甚するコンテナが増え、テストの実行にリ゜ヌスを倧量に消費する可胜性がありたす。 Azure パむプラむン ランナヌ自䜓でテスト䟝存関係コンテナヌを実行する代わりに、 Testcontainers Cloud を䜿甚しお、コンテナヌをクラりド環境䞊で実行できたす。

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

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

Testcontainers クラりドベヌスのセットアップ

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

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

次に、 TC_CLOUD_TOKEN を環境倉数ずしお蚭定する必芁がありたす。

  • パむプラむンに移動し、[線集] を遞択しお、[倉数] ボタンをクリックしたす。
  • [ 新しい倉数 ] を遞択し、詳现を入力したす。
    • 名前: TC_CLOUD_TOKEN.
    • 倀: サヌビス アカりント アクセス トヌクンを入力したす。
    • [この倀を秘密にする] チェックボックスをオンにしたす。
    • [OK] をクリックし、[保存] をクリックしたす。

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

trigger:
- '*'
pool:
   vmImage: ubuntu-latest
steps:
- task: Bash@3
 inputs:
   targetType: "inline"
   script: 'sh -c "$(curl -fsSL https://get.testcontainers.cloud/bash)"'
 env:
   TC_CLOUD_TOKEN: $(TC_CLOUD_TOKEN)
 displayName: 'SetUp TC Cloud Agent'
- task: JavaToolInstaller@0
 inputs:
   versionSpec: '17'
   jdkArchitectureOption: 'x64'
   jdkSourceOption: 'PreInstalled'
 displayName: 'SetUp Java'
- script: |
   ./mvnw verify
 displayName: 'Build with Maven'

テストを実行する前に、 TC_CLOUD_TOKEN を環境倉数ずしお枡しおTestcontainers Cloud゚ヌゞェントを開始するステップを含め、Pipelineで以前に定矩した倉数から倀を怜玢したす。

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

05:19:28.539 [main] INFO org.testcontainers.DockerClientFactory - Connected to docker:
Server Version: 78+testcontainerscloud (via Testcontainers Desktop 1.4.15)
API Version: 1.43
Operating System: Ubuntu 22.04.3 LTS
Total Memory: 15689 MB
05:19:29.727 [main] INFO org.testcontainers.utility.RyukResourceReaper - Ryuk started - will monitor and terminate Testcontainers containers on JVM exit

たた、Testcontainers CloudのTurboModeを、䞊列実行機胜を備えたビルドツヌルず組み合わせお、テストを䞊列に実行するこずもできたす。

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

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

- script: |
   ./mvnw verify -DforkCount=4
 displayName: 'Build with Maven'

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

結論

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

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

Testcontainers Cloudは、 無料アカりントを䜜成するこずで䜿い始めるこずができたす。

さらに詳しく

関連蚘事