Sobes.tech
Middle

Co se děje poté, co GitLab stáhne kód?

sobes.tech AI

Odpověď od AI

Poté, co GitLab stáhne kód repozitáře do pracovního adresáře, začíná provádění CI/CD pipeline definované v souboru .gitlab-ci.yml.

  1. Analýza .gitlab-ci.yml: GitLab Runner (nebo samotný GitLab, pokud je použit vestavěný CI) načte konfiguraci z .gitlab-ci.yml. Tento soubor popisuje fáze (stages) a úkoly (jobs) pipeline.
  2. Inicializace Runnera: Přidělen je dostupný GitLab Runner pro provádění pipeline. Runner získá informace o repozitáři, commitu, větvi a konfiguraci .gitlab-ci.yml.
  3. Vytvoření prostředí pro běh: Runner připraví prostředí pro vykonávání úkolů. To může být:
    • Virtuální stroj
    • Kontejner (Docker, Kubernetes)
    • Vyhrazený server
    • Shell
  4. Vykonávání etap (stages): Pipeline se provádí postupně podle etap definovaných v .gitlab-ci.yml. Úkoly v jedné etapě mohou být spuštěny paralelně.
  5. Vykonávání úkolů (jobs): Uvnitř každé etapy jsou vykonávány nakonfigurované úkoly. Úkol zahrnuje:
    • Určení obrazu nebo vykonavatele (executor), pokud není nastaven na úrovni pipeline nebo sekce variables.
    • Klonování repozitáře (již provedeno GitLabem, ale Runner může spustit git fetch nebo git checkout pro požadovaný stav).
    • Obnovení cache (pokud je nakonfigurována) pro urychlení sestavení (například načítání závislostí).
    • Spuštění skriptů (script): To je hlavní obsah úkolu, kde jsou prováděny příkazy sestavení, testování, analýzy nebo nasazení.
    • Nahrání artefaktů (pokud je nakonfigurováno): Výsledky úkolu (například zkompilované binárky, zprávy) jsou uloženy pro pozdější použití nebo nahrání.
    • Uložení cache (pokud je nakonfigurována) pro urychlení budoucích spuštění.
  6. Zpráva o stavu: Runner odesílá stav provádění každého úkolu (úspěch, chyba, zrušení) zpět do GitLab. Uživatel vidí pokrok a výsledky na stránce pipeline.
  7. Přechod na další etapu: Pokud všechny úkoly v aktuální etapě skončily úspěšně (nebo je nastaven allow_failure), začíná další etapa. Pokud úkol skončí chybou a allow_failure není nastaven, je celá pipeline přerušena.
  8. Dokončení pipeline: Po provedení všech etap (nebo v případě chyby) je pipeline ukončena. Výsledky a artefakty jsou dostupné přes webové rozhraní GitLab.

Příklad struktury .gitlab-ci.yml:

// Definujeme etapy pipeline
stages:
  - build
  - test
  - deploy

// Úkol sestavení v etapě build
build_job:
  stage: build
  image: docker:latest // Použití Docker obrazu
  script:
    - echo "Sestavuji aplikaci..."
    - docker build -t myapp:$CI_COMMIT_SHORT_SHA . // Sestavení Docker obrazu
  artifacts:
    paths:
      - myapp.tar // Uložení artefaktu sestavení

// Úkol testování v etapě test
test_job:
  stage: test
  image: python:3.9 // Použití Python obrazu
  script:
    - echo "Spouštím testy..."
    - pip install -r requirements.txt
    - pytest // Spuštění testů
  needs: ["build_job"] // Závisí na úspěšném dokončení build_job

// Úkol nasazení v etapě deploy
deploy_job:
  stage: deploy
  image: ubuntu:latest // Použití Ubuntu obrazu
  script:
    - echo "Nasazuji aplikaci..."
    - echo "Nasazovací skript zde..." // Nasazovací skript
  only: // Spouští se pouze při commitech na master nebo tagy
    - master
    - tags
  needs: ["test_job"] // Závisí na úspěšném dokončení test_job

Tím je stahování kódu pouze prvním krokem, po kterém následuje složitý automatizovaný proces sestavení, testování a nasazení založený na konfiguraci .gitlab-ci.yml.