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_HOST savo 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 klaida Wait strategy failed. Container is removed arba Timed out waiting for log output matching '.*Started.*'.