Testcontainersã¯ããšãã§ã¡ã©ã«Dockerã³ã³ããã䜿çšããŠãããŒã¿ããŒã¹ãã¡ãã»ãŒãžãã¥ãŒãæ€çŽ¢ãšã³ãžã³ãªã©ã®äŸåé¢ä¿ã§ãã¹ããå®è¡ã§ãããã¹ãã©ã€ãã©ãªã§ãã Testcontainers ã¯ãããã°ã©ã å¯èœãªAPIã䜿çšããŠãããã®Dockerã³ã³ããã®ã©ã€ããµã€ã¯ã«ã管çããå¿ èŠãªã¢ããªã±ãŒã·ã§ã³ã®äŸåé¢ä¿ã®èšå®ããã现ããå¶åŸ¡ã§ããŸãã
Azure Pipelines ã¯ãAzure DevOps ããŒã« ã¹ã€ãŒãã®äžéšãšã㊠Microsoft ãæäŸããã¯ã©ãŠãããŒã¹ã®ç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³ããã³ç¶ç¶çããªããªãŒ (CI/CD) ãµãŒãã¹ã§ãã Azure Pipelines ã¯ããœãããŠã§ã¢éçºãšé ä¿¡ããã»ã¹ãå¹çåããããã«ãéçºè ã DevOps ããŒã ã«ãã£ãŠåºã䜿çšãããŠããŸãã
ãã®èšäºã§ã¯ãAzure DevOps ãã©ãããã©ãŒã äžã® Azure Pipelines ã䜿çšã㊠Testcontainers ããŒã¹ã®ãã¹ããå®è¡ããæ¹æ³ã«ã€ããŠèª¬æããŸãã ããã§ã¯ãGitHubã§èŠã€ãããã Java/Spring Bootã¢ããªã±ãŒã·ã§ã³ã®äŸã䜿çšããŸãã

ãããžã§ã¯ãã®ã»ããã¢ãã
ãã®èšäºã§ã¯ã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 (äœæ)] ãéžæããŸãããããžã§ã¯ããäœæããããã ãããžã§ã¯ã ãã¥ãŒ ã«ç§»åãã[ ãã€ãã©ã€ã³] ãéžæããŸãã
ãããžã§ã¯ãã®ãã€ãã©ã€ã³ãæ§æããã«ã¯ãæ¬¡ã®æé ã«åŸããŸãã
- [æ°ãããã€ãã©ã€ã³] ãã¿ã³ãã¯ãªãã¯ãã[GitHub] ãéžæããŸããÂ
- ãŸã èªèšŒãããŠããªãå Žåã¯ãGitHub ã¢ã«ãŠã³ãã§èªèšŒããããã«æ±ããããŸãã
- ãã€ãã©ã€ã³ãæ§æãããªããžããªãéžæããŸãã
azure-pipelines.ymlãã¡ã€ã«ããªãå Žåã¯ããªããžããªå ã®ãã«ãæ§æãã¡ã€ã«ã«åºã¥ããŠãæšæºãã€ãã©ã€ã³æ§æã®äžèŠ§ãææ¡ãããŸãããªããžããªã«ã¯ãã§ã«azure-pipelines.ymlãã¡ã€ã«ãããããããã€ãã©ã€ã³ãšãã£ã¿ã«ã¯azure-pipelines.ymlãã¡ã€ã«ã®å 容ãäºåå ¥åãããŸãã- [å®è¡] ãéžæããŠãã€ãã©ã€ã³ãããªã¬ãŒããŸãã
Azure Pipelines ã©ã³ããŒã«ã¯æ¢ã« Docker ãã€ã³ã¹ããŒã«ãããŠæ§æãããŠããããããã¹ãã¯æ£åžžã«å®è¡ãããã¯ãã§ã (å³ 1)ã

ãã®å³ã«ç€ºãããã«ããã¹ã㯠Azure Pipeline ã©ã³ããŒã®æ¢å®ã® Docker ãµããŒãã䜿çšããŠæ£åžžã«å®è¡ãããŸããã ãããžã§ã¯ãã倧ãããªãã«ã€ããŠããã¹ãã«äœ¿çšããã³ã³ãããå¢ãããã¹ãã®å®è¡ã«ãªãœãŒã¹ã倧éã«æ¶è²»ããå¯èœæ§ããããŸãã Azure ãã€ãã©ã€ã³ ã©ã³ããŒèªäœã§ãã¹ãäŸåé¢ä¿ã³ã³ãããŒãå®è¡ãã代ããã«ã Testcontainers Cloud ã䜿çšããŠãã³ã³ãããŒãã¯ã©ãŠãç°å¢äžã§å®è¡ã§ããŸãã
Testcontainers Cloudã䜿çšãããšãã©ã³ããŒã§DockerããŒã¢ã³ãå®è¡ããå¿ èŠãããããŸããã ã³ã³ããã¯ãªã³ããã³ãã®ã¯ã©ãŠãç°å¢ã§å®è¡ãããããããã«ãã«é«CPU/ã¡ã¢ãªã®åŒ·åãªCIã¯ãŒã«ãŒã䜿çšããå¿ èŠã¯ãããŸããã
æå°éã®ã»ããã¢ããã§Testcontainers Cloudã䜿çšããTestcontainersããŒã¹ã®ãã¹ããå®è¡ããæ¹æ³ãèŠãŠã¿ãŸãããã
Testcontainers ã¯ã©ãŠãããŒã¹ã®ã»ããã¢ãã
Testcontainers Cloudã¢ã«ãŠã³ãããŸã ãæã¡ã§ãªãå Žåã¯ã次ã®ããã«ã¢ã«ãŠã³ããäœæãããµãŒãã¹ã¢ã«ãŠã³ãããŒã¯ã³ãååŸããŸãïŒå³ 2ïŒã
- Testcontainers Cloudã¢ã«ãŠã³ãã«ãµã€ã³ã¢ããããŸãã
- ãã°ã€ã³ããããçµç¹ãäœæããŸãã
- Testcontainers Cloud ããã·ã¥ããŒãã«ç§»åãããµãŒãã¹ ã¢ã«ãŠã³ããçæããŸãã

次ã«ã 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ã¯ã ç¡æã¢ã«ãŠã³ããäœæããããšã§äœ¿ãå§ããããšãã§ããŸãã
ããã«è©³ãã
- Docker Newsletter ã賌èªããŠãã ããã
- Docker ãã¹ã¯ãããã®ææ°ãªãªãŒã¹ãå ¥æããŸãã
- ããã«ãŒã¯åããŠã§ãã? å§ããŸããããÂ
- Testcontainersã«ã€ããŠè³ªåããããŸãã? Testcontainers Slackã§æ¥ç¶ããŸãã
- ç¡æã¢ã«ãŠã³ããäœæããŠãTestcontainers Cloud ã®äœ¿çšãéå§ããŠãã ããã
- Testcontainers ã®ãã¹ã ãã©ã¯ãã£ã¹ã«ã€ããŠèª¬æããŸãã
- Testcontainers ã¬ã€ãããéå§ããŸãã