🟡 Intermediate

GitLab CI — Integrovaný CI/CD systém v GitLabe

GitLab CI/CD je natívna súčasť GitLabu, ktorá poskytuje kompletný pipeline systém pre build, test a deploy — všetko konfigurované v jednom súbore .gitlab-ci.yml.


Čo je GitLab CI

GitLab CI je plne integrovaný CI/CD systém, ktorý nepotrebuje žiadne externé nástroje. Pipeline sa definuje v súbore .gitlab-ci.yml v koreňovom adresári repozitára. Každý push automaticky spustí pipeline podľa definovaných pravidiel.

Na rozdiel od externých CI nástrojov, GitLab CI má prístup ku všetkým funkciám GitLabu — merge requests, environments, container registry, package registry a monitoring.

Stages, Jobs a Pipeline

Pipeline sa skladá zo stages (fáz), ktoré bežia sekvenčne. V rámci každej stage bežia jobs paralelne.

stages:
  - build
  - test
  - deploy

build-app:
  stage: build
  image: node:20
  script:
    - npm ci
    - npm run build
  artifacts:
    paths:
      - dist/
    expire_in: 1 hour

unit-tests:
  stage: test
  image: node:20
  script:
    - npm ci
    - npm test
  coverage: '/Lines\s*:\s*(\d+\.?\d*)%/'

lint:
  stage: test
  image: node:20
  script:
    - npm run lint

deploy-prod:
  stage: deploy
  script:
    - ./deploy.sh
  environment:
    name: production
    url: https://app.example.com
  rules:
    - if: $CI_COMMIT_BRANCH == "main"
      when: manual

Artifacts a Cache

GitLab CI rozlišuje dva mechanizmy zdieľania dát medzi jobmi:

Artifacts — výstupy z jobov, ktoré sa prenášajú do ďalších stages:

  • Build výstupy (binárky, dist priečinky)
  • Test reporty a coverage
  • Dostupné na stiahnutie z UI

Cache — urýchlenie jobov cachovaním dependencies:

cache:
  key:
    files:
      - package-lock.json
  paths:
    - node_modules/

Artifacts slúžia na zdieľanie výstupov, cache na zrýchlenie behov. Nezamieňajte ich.

Praktické použitie

  • Multi-project pipelines — triggering pipelines medzi repozitármi
  • Parent-child pipelines — rozdelenie veľkého pipeline na menšie
  • Dynamic pipelines — generovanie pipeline YAML dynamicky
  • Review apps — automatický deploy pre každý merge request
  • Auto DevOps — predkonfigurovaný pipeline pre bežné aplikácie

Best Practices

  • Používajte rules: namiesto zastaralého only/except
  • Definujte timeout pre každý job
  • Cache kľúče viažte na lock súbory (package-lock.json, Gemfile.lock)
  • Využívajte needs: pre DAG pipeline (paralélny beh naprieč stages)
  • Uchovávajte secrets v CI/CD Variables, nie v kóde
  • Nastavte expire_in pre artifacts, aby nezaberali zbytočne miesto

GitLab CI je silná voľba pre tímy, ktoré chcú mať celý DevOps lifecycle v jednej platforme bez nutnosti integrovať externé nástroje.