GitLab Runner: Testų vykdymas su Testcontainers
Ši dokumentacija yra Docker atvaizdžių kūrimas vadovo dalis. Visą vadovą rasite čia: Efektyviai kurkite ir įkelkite Docker atvaizdžius iš savo GitLab CI/CD procesų naudodami Stackhero runner'ius ir Docker-in-Docker.
👋 Sveiki atvykę į Stackhero dokumentaciją!
Stackhero siūlo paprastą GitLab Runner cloud sprendimą, kuris leidžia efektyviai ir be rūpesčių vykdyti jūsų GitLab CI/CD užduotis. Štai ko galite tikėtis:
- Neribotos CI/CD minutės: vykdykite savo pipelines tiek kartų, kiek reikia, be apmokestinimo už minutes ar netikėtų mokesčių.
- Keli vienu metu vykdomi darbai: spartinkite kūrimo procesą paleisdami kelias užduotis lygiagrečiai.
- Docker executor su Docker-in-Docker palaikymu: lengvai kurkite ir talpinkite konteinerių atvaizdus kaip CI/CD proceso dalį.
- Puikiai veikia tiek su GitLab.com, tiek su self-managed GitLab instancijomis.
- Privati, dedikuota infrastruktūra su greitu NVMe/SSD saugojimu užtikrina stabilų ir nuspėjamą build našumą.
- Pasiekiama 🇪🇺 Europoje ir 🇺🇸 JAV regionuose, kad atitiktų jūsų komandos poreikius.
Taupykite laiką: galite prijungti savo pirmąjį GitLab Runner ir pradėti vykdyti pipelines vos per kelias minutes!
Testcontainers yra testavimo biblioteka, prieinama Java, Go, Node.js, Python, .NET ir kitoms kalboms, kuri paleidžia tikras paslaugas kaip laikinas Docker konteinerius jūsų testų metu. Vietoj to, kad imituotumėte duomenų bazę ar žinučių tarpininką, jūsų integraciniai testai bendrauja su tikru PostgreSQL, MySQL, Redis ar Kafka egzemplioriumi, kuris sukuriamas prieš testus ir pašalinamas iškart po jų. Ši biblioteka ypač populiari Java ir Spring projektuose.
Testcontainers reikia Docker daemon'o, todėl jis veikia su ta pačia Docker-in-Docker konfigūracija kaip ir anksčiau. Papildomų kintamųjų nereikia:
test:
stage: test
# Naudokite atvaizdį, kurio reikia jūsų testams (čia JDK), nebūtinai docker atvaizdį:
image: gradle:jdk21
services:
- name: docker:29-dind
alias: docker
variables:
DOCKER_HOST: "tcp://docker:2375"
DOCKER_TLS_CERTDIR: ""
script:
- gradle test
Testcontainers naudoja DOCKER_HOST, kad rastų daemon'ą, ir naudoja tą patį docker hostname, kad pasiektų konteinerių publikuotus portus. Abu variantai veikia, nes docker alias'as išsprendžiamas jūsų darbo tinkle.
Palikite
DOCKER_HOSTsavo Testcontainers darbuose. Jei jo nėra, Testcontainers naudoja runner'io prijungtą Docker socket'ą, tada bando pasiekti testų konteinerius per host'o IP adresą, prie kurio jūsų darbas negali prisijungti. Dažniausias simptomas – Ryuk pagalbinio konteinerio klaidaWait strategy failed. Container is removedarbaTimed out waiting for log output matching '.*Started.*'.