Sobes.tech
Middle

Wat gebeurt er nadat GitLab de code heeft gedownload?

sobes.tech AI

Antwoord van AI

Nadat GitLab de code van de repository heeft gedownload naar de werkdirectory, begint de uitvoering van de CI/CD-pipeline die is gedefinieerd in het bestand .gitlab-ci.yml.

  1. Analyse van .gitlab-ci.yml: GitLab Runner (of GitLab zelf, indien ingebouwde CI wordt gebruikt) leest de configuratie uit .gitlab-ci.yml. Dit bestand beschrijft de fases (stages) en taken (jobs) van de pipeline.
  2. Initialisatie van de Runner: Een beschikbare GitLab Runner wordt toegewezen om de pipeline uit te voeren. De Runner krijgt informatie over de repository, de commit, de branch en de configuratie van .gitlab-ci.yml.
  3. Aanmaak van de uitvoeringomgeving: De Runner bereidt een omgeving voor om de taken uit te voeren. Dit kan zijn:
    • Virtuele machine
    • Container (Docker, Kubernetes)
    • Dedicated server
    • Shell
  4. Uitvoering van de fases (stages): De pipeline wordt sequentieel uitgevoerd volgens de in .gitlab-ci.yml gedefinieerde fases. Taken binnen één fase kunnen parallel worden uitgevoerd.
  5. Uitvoering van de taken (jobs): Binnen elke fase worden de geconfigureerde taken uitgevoerd. Een taak omvat:
    • Definitie van de image of executor (uitvoerder), indien niet op pipeline- of variabeleniveau ingesteld.
    • Clonen van de repository (al gedaan door GitLab, maar de Runner kan git fetch of git checkout uitvoeren voor de benodigde toestand).
    • Herstellen van de cache (indien geconfigureerd) om de build te versnellen (bijvoorbeeld afhankelijkheden laden).
    • Uitvoeren van scripts (script): Dit is de hoofdinhoud van de taak, waarin build-, test-, analyse- of deploy-commando's worden uitgevoerd.
    • Uploaden van artefacten (indien geconfigureerd): De resultaten van de taak (bijvoorbeeld gecompileerde binaries, rapporten) worden opgeslagen voor later gebruik of download.
    • Opslaan van de cache (indien geconfigureerd) om toekomstige runs te versnellen.
  6. Statusrapport: De Runner stuurt de status van elke taak (succes, fout, annulering) terug naar GitLab. De gebruiker ziet de voortgang en resultaten op de pipeline-pagina.
  7. Naar de volgende fase: Als alle taken in de huidige fase succesvol zijn afgerond (of allow_failure is ingesteld), begint de volgende fase. Als een taak eindigt met een fout en allow_failure niet is ingesteld, wordt de hele pipeline afgebroken.
  8. Einde van de pipeline: Na het uitvoeren van alle fases (of bij fout), eindigt de pipeline. Resultaten en artefacten zijn beschikbaar via de webinterface van GitLab.

Voorbeeld van structuur van .gitlab-ci.yml:

// Definieer de fases van de pipeline
stages:
  - build
  - test
  - deploy

// Build-taak in de build-fase
build_job:
  stage: build
  image: docker:latest // Gebruik van een Docker-image
  script:
    - echo "De applicatie bouwen..."
    - docker build -t myapp:$CI_COMMIT_SHORT_SHA . // Bouw Docker-image
  artifacts:
    paths:
      - myapp.tar // Sla het build-artefact op

// Test-taak in de test-fase
test_job:
  stage: test
  image: python:3.9 // Gebruik van een Python-image
  script:
    - echo "Testen uitvoeren..."
    - pip install -r requirements.txt
    - pytest // Voer tests uit
  needs: ["build_job"] // Afhankelijk van succesvolle voltooiing van build_job

// Deploy-taak in de deploy-fase
deploy_job:
  stage: deploy
  image: ubuntu:latest // Gebruik van een Ubuntu-image
  script:
    - echo "De applicatie deployen..."
    - echo "Hier komt het deploy-script..." // Deploy-script
  only: // Alleen uitvoeren bij commits op master of tags
    - master
    - tags
  needs: ["test_job"] // Afhankelijk van succesvolle voltooiing van test_job

Dus, het downloaden van de code is slechts de eerste stap, gevolgd door een complexe geautomatiseerde build-, test- en deploy-proces gebaseerd op de configuratie in .gitlab-ci.yml.