Manuální deployment v pátek v 17:00 — každý to zná, nikdo to nechce opakovat. Automatizovaná CI/CD pipeline eliminuje lidské chyby, zkracuje feedback loop a umožňuje nasazovat desítkykrát denně s důvěrou. Ukážeme si, jak ji postavit.
Anatomie moderní CI/CD pipeline¶
Pipeline není jen „build a deploy”. Kvalitní pipeline má jasně definované stages, kde každá fáze musí projít, než se spustí další:
- Commit stage — lint, unit testy, compile (< 5 min)
- Build stage — Docker image build, artifact packaging
- Security stage — SAST, dependency scanning, container scanning
- Test stage — integrační testy, API testy, e2e testy
- Staging deploy — automatický deployment na staging prostředí
- Production deploy — manuální approval + automated rollout
GitLab CI — pipeline as code¶
GitLab CI definuje pipeline v souboru .gitlab-ci.yml přímo v repozitáři. Výhoda: pipeline je verzovaná spolu s kódem.
stages:
- test
- build
- security
- deploy-staging
- deploy-prod
unit-tests:
stage: test
image: node:10-alpine
script:
- npm ci
- npm run lint
- npm run test:unit -- --coverage
artifacts:
reports:
junit: coverage/junit.xml
only:
- merge_requests
- master
build-image:
stage: build
image: docker:stable
services:
- docker:dind
script:
- docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .
- docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
only:
- master
dependency-scan:
stage: security
image: node:10-alpine
script:
- npm audit --audit-level=high
allow_failure: true
deploy-staging:
stage: deploy-staging
script:
- kubectl set image deployment/api api=$CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
- kubectl rollout status deployment/api --timeout=120s
environment:
name: staging
only:
- master
deploy-production:
stage: deploy-prod
script:
- kubectl set image deployment/api api=$CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
- kubectl rollout status deployment/api --timeout=300s
environment:
name: production
when: manual
only:
- master
Jenkins — flexibilní veterán¶
Jenkins je v enterprise prostředí stále dominantní. Jenkinsfile (deklarativní pipeline) přináší pipeline-as-code i do Jenkins světa:
pipeline {
agent { docker { image 'node:10-alpine' } }
stages {
stage('Test') {
steps {
sh 'npm ci'
sh 'npm run test:unit'
}
post {
always { junit 'coverage/junit.xml' }
}
}
stage('Build') {
steps {
sh "docker build -t api:${env.BUILD_NUMBER} ."
sh "docker push registry.company.com/api:${env.BUILD_NUMBER}"
}
}
stage('Deploy Staging') {
steps {
sh "kubectl set image deployment/api api=registry.company.com/api:${env.BUILD_NUMBER}"
}
}
stage('Deploy Production') {
input { message 'Deploy to production?' }
steps {
sh "kubectl set image deployment/api api=registry.company.com/api:${env.BUILD_NUMBER}"
}
}
}
}
GitLab CI vs Jenkins — co vybrat?¶
- GitLab CI: lepší developer experience, integrovaný s GitLab repozitářem, jednodušší konfigurace, shared runners zdarma. Ideální pro menší až střední týmy.
- Jenkins: flexibilnější, obrovský ekosystém pluginů (1500+), lepší pro komplexní enterprise pipeline s custom kroky. Vyžaduje správu Jenkins serveru.
- Trend 2018: GitLab CI rychle roste, Jenkins drží pozici díky legacy instalacím a enterprise adopci.
Security v pipeline — shift left¶
Bezpečnostní kontroly patří do pipeline, ne až na konec development cyklu:
- SAST (Static Application Security Testing) — SonarQube, Bandit (Python), ESLint security plugin
- Dependency scanning — npm audit, OWASP Dependency Check, Snyk
- Container scanning — Clair, Trivy pro skenování Docker images
- Secret detection — git-secrets, truffleHog pro odhalení commitnutých credentials
Důležité: security stage by neměla blokovat deployment na první den. Začněte s allow_failure: true a postupně zpřísňujte, až tým vyřeší existující findings.
Zero-downtime deployment¶
Kubernetes rolling update je základ, ale nestačí. Pro skutečný zero-downtime potřebujete:
- Readiness probes — Kubernetes posílá traffic až když je pod ready
- Graceful shutdown — aplikace dokončí running requests před zastavením
- Database migrations — backward-compatible migrace (expand-contract pattern)
- Feature flags — oddělte deployment od release (LaunchDarkly, unleash)
Metriky pipeline¶
Co neměříte, nezlepšíte. Sledujte:
- Lead time — čas od commitu po produkční deployment
- Deployment frequency — kolikrát denně/týdně nasazujete
- MTTR — mean time to recovery po failed deploymentu
- Change failure rate — procento deploymentů vyžadujících hotfix/rollback
Tyto čtyři metriky pocházejí z výzkumu DORA (DevOps Research and Assessment) a korelují s výkonností celé organizace.
Pipeline je investice, která se vrátí za týdny¶
Postavení kvalitní CI/CD pipeline trvá 2–5 dní. Návratnost přijde okamžitě — méně bugů v produkci, rychlejší feedback pro vývojáře, méně stresu při release. Začněte jednoduše (test + build + deploy) a iterujte. Dokonalá pipeline neexistuje, ale každá automatizovaná pipeline je lepší než žádná.
Brauchen Sie Hilfe bei der Implementierung?
Unsere Experten helfen Ihnen bei Design, Implementierung und Betrieb. Von der Architektur bis zur Produktion.
Kontaktieren Sie uns