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éhoonly/except - Definujte
timeoutpre 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_inpre 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.