GitLab Runner: Exécuter vos tests avec Testcontainers
Cette documentation fait partie du guide Construire des images Docker. Consultez le guide complet ici : Construisez et poussez des images Docker efficacement depuis vos pipelines GitLab CI/CD grâce aux runners Stackhero et à Docker-in-Docker.
👋 Bienvenue sur la documentation de Stackhero !
Stackhero propose une solution GitLab Runner cloud simple qui facilite l'exécution de vos jobs GitLab CI/CD, de façon efficace et sans contraintes. Voici ce que vous pouvez attendre :
- Minutes CI/CD illimitées : exécutez vos pipelines aussi souvent que nécessaire, sans facturation à la minute ni frais imprévus.
- Plusieurs jobs simultanés : accélérez votre développement en lançant plusieurs jobs en parallèle.
- L'executor Docker avec prise en charge de Docker-in-Docker : construisez et poussez facilement des images de conteneurs dans vos processus CI/CD.
- Fonctionne parfaitement avec GitLab.com et les instances GitLab auto-hébergées.
- Une infrastructure privée et dédiée avec un stockage NVMe/SSD rapide garantit des performances de build stables et prévisibles.
- Disponible dans les régions 🇪🇺 Europe et 🇺🇸 USA pour répondre aux besoins de votre équipe.
Gagnez du temps : vous pouvez connecter votre premier GitLab Runner et lancer vos pipelines en seulement quelques minutes !
Testcontainers est une bibliothèque de tests, disponible pour Java, Go, Node.js, Python, .NET et d'autres langages, qui lance de vrais services sous forme de conteneurs Docker jetables pendant l'exécution de vos tests. Plutôt que de simuler une base de données ou un message broker, vos tests d'intégration dialoguent avec une véritable instance PostgreSQL, MySQL, Redis ou Kafka, créée avant les tests et supprimée juste après. Cette solution est particulièrement populaire dans les projets Java et Spring.
Testcontainers a besoin d'un démon Docker, il fonctionne donc avec exactement la même configuration Docker-in-Docker que précédemment. Aucune variable supplémentaire n'est requise :
test:
stage: test
# Utilisez l'image adaptée à vos tests (ici un JDK), pas forcément l'image docker :
image: gradle:jdk21
services:
- name: docker:29-dind
alias: docker
variables:
DOCKER_HOST: "tcp://docker:2375"
DOCKER_TLS_CERTDIR: ""
script:
- gradle test
Testcontainers lit la variable DOCKER_HOST pour localiser le démon, et réutilise le même hostname docker pour accéder aux ports exposés par les conteneurs qu'il lance. Les deux fonctionnent car l'alias docker est résolu sur le réseau du job.
Gardez
DOCKER_HOSTdans vos jobs Testcontainers. Sans cette variable, Testcontainers utilise le socket Docker monté par le runner, puis tente d'accéder à vos conteneurs de test via l'adresse IP de l'hôte, ce qui n'est pas accessible depuis le job. Le symptôme classique est l'échec du conteneur helper Ryuk avecWait strategy failed. Container is removed, ouTimed out waiting for log output matching '.*Started.*'.