Sobes.tech
Middle+

Ako zložité boli pipeline-y v GitLab CI s použitím include a anchor?

sobes.tech AI

Odpoveď od AI

Pracoval som s pipeline-ami GitLab CI, ktoré používajú vloženia a kotvy na štruktúrovanie a opätovné použitie kódu v projektoch rôznej zložitosti.

Typické scenáre použitia: build pipeline pre mikroslužby s rôznymi prostrediami (dev, staging, prod).

Používam:

  • Externé vloženia: na prepojenie spoločných šablón build, test a deploy z centralizovaného úložiska.
  • Lokálne vloženia: na rozdelenie veľkého .gitlab-ci.yml na menšie, čitateľnejšie časti (napríklad podľa typu build alebo fázy).
  • Kotvy (&) a odkazy (*): na opätovné použitie opakujúcich sa sekcií, ako je konfigurácia Docker obrázkov, spoločné skripty alebo parametre úloh.

Príklady zložitosti:

  • Pipeline s logickým rozvetvením v závislosti od typu commit, ovplyvnených súborov alebo vetvy.
  • Použitie rules alebo only/except v kombinácii s vloženiami na zahrnutie/vylúčenie určitých úloh alebo pipeline.
  • Kombinácia kotiev a vložení na vytvorenie parametrických šablón úloh, ktoré je možné ľahko rekonfigurovať v podfajloch.
# .gitlab-ci.yml - príklad štruktúry
include:
  - project: 'common/ci-templates'
    ref: main
    file: '/templates/build-java.yml' # Spoločný build šablóna pre Java

  - local: '.gitlab-ci/deploy-prod.yml' # Lokálny súbor deploy na prod

variables:
  SERVICE_NAME: my-service

stages:
  - build
  - test
  - deploy

# Použitie kotiev pre spoločné nastavenia
.base_job: &base_job
  image: ubuntu:latest
  before_script:
    - echo "Starting job..."

build-job:
  <<: *base_job # Aplikácia kotvy
  stage: build
  script:
    - echo "Building $SERVICE_NAME"

# Úloha definovaná v vložení z common/ci-templates
# java-build:
#    <<: *base_job
#    stage: build
#    script:
#      - mvn clean package
# ... (ďalšie úlohy)

Efektívne využívanie vložení a kotiev umožňuje vytvárať škálovateľné a ľahko udržiavateľné CI/CD pipeline, znižuje duplikáciu kódu a zjednodušuje správu konfigurácie. Zložitosť je zvyčajne určená počtom služieb, rozmanitosťou technológií a požadovanou flexibilitou pipeline.