GitLab Runner: Tests mit Testcontainers ausführen
Diese Dokumentation ist Teil des Docker-Images bauen-Leitfadens. Den vollständigen Leitfaden finden Sie hier: Bauen und pushen Sie Docker-Images effizient aus Ihren GitLab CI/CD-Pipelines mit Stackhero Runnern und Docker-in-Docker.
👋 Willkommen in der Stackhero-Dokumentation!
Stackhero bietet Ihnen eine unkomplizierte GitLab Runner Cloud-Lösung, mit der Sie Ihre GitLab CI/CD-Jobs effizient und ohne Aufwand ausführen können. Das erwartet Sie:
- Unbegrenzte CI/CD-Minuten: Führen Sie Ihre Pipelines so oft aus, wie Sie möchten – ohne Abrechnung pro Minute oder unerwartete Zusatzkosten.
- Mehrere gleichzeitige Jobs: Beschleunigen Sie Ihre Entwicklung, indem Sie mehrere Jobs parallel ausführen.
- Der Docker Executor mit Docker-in-Docker-Unterstützung: Erstellen und pushen Sie Container-Images ganz einfach als Teil Ihres CI/CD-Prozesses.
- Funktioniert nahtlos mit GitLab.com und self-managed GitLab-Instanzen.
- Eine private, dedizierte Infrastruktur mit schneller NVMe/SSD-Speicherung sorgt für stabile und vorhersehbare Build-Performance.
- Verfügbar in den Regionen 🇪🇺 Europa und 🇺🇸 USA, passend zu den Anforderungen Ihres Teams.
Sparen Sie Zeit: Sie können Ihren ersten GitLab Runner verbinden und bereits nach wenigen Minuten mit Ihren Pipelines starten!
Testcontainers ist eine Testbibliothek, verfügbar für Java, Go, Node.js, Python, .NET und weitere Sprachen, die während Ihrer Tests echte Services als temporäre Docker-Container startet. Anstatt eine Datenbank oder einen Message-Broker zu mocken, kommunizieren Ihre Integrationstests mit einer echten PostgreSQL-, MySQL-, Redis- oder Kafka-Instanz, die vor den Tests erstellt und danach wieder entfernt wird. Besonders beliebt ist Testcontainers in Java- und Spring-Projekten.
Testcontainers benötigt einen Docker-Daemon und läuft daher mit exakt derselben Docker-in-Docker-Konfiguration wie oben. Es sind keine zusätzlichen Variablen erforderlich:
test:
stage: test
# Verwenden Sie das Image, das Ihre Tests benötigen (hier ein JDK), nicht zwingend das Docker-Image:
image: gradle:jdk21
services:
- name: docker:29-dind
alias: docker
variables:
DOCKER_HOST: "tcp://docker:2375"
DOCKER_TLS_CERTDIR: ""
script:
- gradle test
Testcontainers liest DOCKER_HOST, um den Daemon zu finden, und verwendet denselben docker-Hostnamen, um auf die von den Containern veröffentlichten Ports zuzugreifen. Beides funktioniert, da der Alias docker im Netzwerk Ihres Jobs aufgelöst wird.
Belassen Sie
DOCKER_HOSTin Ihren Testcontainers-Jobs. Ohne diese Variable greift Testcontainers auf den vom Runner gemounteten Docker-Socket zurück und versucht dann, Ihre Testcontainer über die Host-IP-Adresse zu erreichen, was aus dem Job heraus nicht möglich ist. Typische Symptome sind, dass der Ryuk-Helfercontainer mitWait strategy failed. Container is removedoderTimed out waiting for log output matching '.*Started.*'fehlschlägt.