Automatické testování a deploy
Proč automatizovat testování a nasazení
Automatické testování a nasazení (CI/CD) zkracuje dobu dodávky, zvyšuje kvalitu a snižuje rizika. Continuous Integration zajistí, že změny jsou často integrovány, testovány a verifikovány, zatímco Continuous Delivery/Deployment automatizuje propagaci artefaktů až do produkce. Cílem je vytvořit spolehlitelný, auditovatelný a opakovatelný proces, který umožní malé a časté releasy s rychlou zpětnou vazbou.
Principy CI/CD a referenční pipeline
- Malé batch velikosti: časté commity a krátké feature větve.
- Automatizace všeho opakovatelného: build, testy, bezpečnostní skeny, migrace DB, release.
- Shift-left kvalita a bezpečnost: chyby a zranitelnosti odhalit co nejdříve.
- Observabilita a metriky: měřit průchod pipeline, stabilitu testů, DORA metriky.
Typická pipeline: lint → build → unit testy → integrační testy → bezpečnostní skeny → build artefaktů/kontejnerů → publikace do registry → nasazení do test/stage → e2e/perf testy → schválení → nasazení do produkce → post-deploy validace a monitorování.
Strategie správy zdrojového kódu a release
- Trunk-based development: krátké větve, feature flagy, minimální merge konflikty.
- GitHub Flow / GitLab Flow: PR/MR do hlavní větve, automatické preview prostředí.
- SemVer a verzování balíků: major.minor.patch, automatická generace changelogu z konvenčních commitů.
- Monorepo vs. polyrepo: v monorepu preferujte path filters a selektivní spouštění.
Testovací pyramida a portfolio testů
- Unit testy: rychlé, izolované, vysoké pokrytí klíčové logiky.
- Integrační testy: testují propojení modulů, typicky s in-memory/ephemerálními službami (DB, message broker).
- Smluvní testy (contract): zajišťují kompatibilitu API mezi službami (např. Pact).
- E2E testy: uživatelské scénáře nad nasazenou aplikací; spouštět menší kurátorovaný subset na každém buildu, plný rozsah v noci.
- Výkonnostní a zátěžové testy: měří latenci, propustnost, spotřebu zdrojů, škálování.
- Bezpečnostní testy: SAST, SCA, DAST, IaC skeny, tajemství v repozitáři, container/image skeny.
Správa testovacích dat a determinismus
Testy musí být reprodukovatelné. Používejte fixture sady, seedování databáze, hermetická prostředí (Docker Compose, Testcontainers) a izolaci podle testu. Citlivá data anonimizujte, generujte synthetic data a vyhýbejte se sdíleným stavům.
Infrastruktura jako kód a ephemerální prostředí
Provisioning prostředí automatizujte přes Terraform/Pulumi, konfiguraci přes Ansible/Helm/Kustomize. Pro každé MR/PR vytvářejte ephemerální prostředí (preview) s lifecyklem svázaným s větví. To umožní produktům a QA validovat změny dříve.
Ukázky pipeline konfigurací
# GitHub Actions (node.js) name: ci on: [push, pull_request] jobs: build-test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: { node-version: 20 } - run: npm ci - run: npm run lint - run: npm test -- --ci --reporters=junit - run: npm run build - uses: actions/upload-artifact@v4 with: { name: web-dist, path: dist }
# GitLab CI (dockerized backend) stages: [lint, test, build, scan, deploy] variables: { DOCKER_DRIVER: overlay2 } lint: stage: lint script: [ "ruff check ." ] test: stage: test services: [ docker:dind ] script: [ "pytest -q" ] build: stage: build script: - docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA . - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA scan: stage: scan script: [ "trivy image --exit-code 1 $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA" ] deploy: stage: deploy when: manual script: [ "helm upgrade --install app chart/ --set image.tag=$CI_COMMIT_SHA" ]
# Jenkinsfile (declarative) pipeline { agent any stages { stage('Test') { steps { sh 'pytest -q' } } stage('Build') { steps { sh 'docker build -t app:${GIT_COMMIT} .' } } stage('Security') { steps { sh 'trivy image --exit-code 1 app:${GIT_COMMIT}' } } stage('Deploy') { steps { sh 'kubectl set image deploy/app app=app:${GIT_COMMIT}' } } } }
Artefakty, image registry a reprodukovatelnost
Každý build vytváří verzi artefaktů (balík, kontejner) s jedinečným tagem (commit SHA). Používejte imutable tagy, podepisujte image (cosign), generujte SBOM (CycloneDX/SPDX) a ukládejte do interních registrů. Definujte build provenance (SLSA) pro auditovatelnost dodavatelského řetězce.
Bezpečnost v CI/CD a supply chain
- Správa tajemství: uložené mimo repo (Vault, KMS, OIDC federace, GitHub Actions OIDC → cloud IAM), krátkodobé tokeny.
- SAST/SCA: statická analýza kódu a závislostí; fail kvalitativní brány nad prahovými hodnotami.
- DAST: dynamické skeny běžících preview; automatické vytvoření ticketů.
- Policy-as-code: OPA/Conftest pro vynucení politik (např. povolené base image, zákaz privilegovaných kontejnerů).
Databázové migrace a řízení schématu
Automatizujte migrace (Flyway/Liquibase/Alembic/Django migrations). Uplatňujte expand-and-contract pattern: nejprve zpětně kompatibilní změny, poté nasazení aplikace, nakonec odstraňování starých cest. Migrace budou součástí pipeline a běží atomicky s možností rollbacku.
Strategie nasazení: Blue/Green, Canary, Rolling
- Blue/Green: paralelní prostředí; přepnutí provozu po validaci (rychlý rollback).
- Canary: postupné navyšování podílu provozu; měřit metriky chyb a latence.
- Rolling: postupná výměna podů/instancí; udržet dostupnost při nasazování.
K orchestrace využijte Argo Rollouts/Flagger s automatickými branami na základě SLO a chybovosti.
Feature flagy, experimenty a řízení rizika
Nové funkce aktivujte přes feature flagy (LaunchDarkly, OpenFeature). Umožní to decoupling releasu od expozice funkcí, AB testy a bezpečný kill-switch. Flagy jsou součástí governance (expirace, audit, cleanup).
Observabilita, verifikace po nasazení a rollback
Post-deploy kroky: syntetické testy, kontrola logů, APM metrik (latence, error rate), business KPI. Definujte automaty pro rollback: pokud se poruší SLO v definovaném čase, pipeline spustí návrat na předchozí verzi.
Paralelizace, caching a optimalizace rychlosti pipeline
- Cache závislostí a build artefaktů: sdílená cache mezi běhy, ale invalidace podle lockfile.
- Matrix buildy: paralelní běh testů pro různé verze runtime a OS.
- Sharding testů: rozdělení testů podle doby běhu (historické metriky).
Flaky testy a stabilita
Flaky testy identifikujte přes retry s metadaty. Vytvářejte reporty nestability, izolujte závislosti na čase, síti a paralelismu. Flaky test dočasně označte jako quarantined s ticketem na nápravu.
CI/CD pro mobilní a frontend aplikace
- Frontend: audit výkonu (Lighthouse), vizuální regresní testy (Percy/Chromatic), bundlové analýzy, E2E (Playwright/Cypress).
- Mobilní: buildy (Gradle/Fastlane), podepisování, testy na reálných zařízeních (Device Farm), phased release přes store kanály.
Compliance, audit a traceability
Logujte každý krok pipeline (kdo co schválil, jaké artefakty kde běží). Udržujte auditní stopu (evidence změn, výsledky testů, skenů, SBOM). Pro regulovaná odvětví implementujte four-eyes principle a povinné schvalování.
Metriky a cíle: DORA a kvalita vydání
- Deployment Frequency: jak často nasazujete.
- Lead Time for Changes: od commitu do produkce.
- Change Failure Rate: podíl releasů vyžadujících zásah/rollback.
- MTTR: průměrná doba obnovy po incidentu.
Nastavte cíle a zlepšujte pipeline podle bottlenecků (čekání na schválení, pomalé testy, flakiness).
Náklady a škálování CI
Optimalizujte počet běhů, používejte path filters, self-hosted běžce pro heavy joby, sdílené cache a artefaktové servery. Pravidelně čistěte registry a preview prostředí podle TTL.
ChatOps a provozní ergonomie
Integrujte pipeline s chatem (Slack/Teams): spouštění jobů, schvalování, náhled logů, publikace releasových poznámek. Zvyšuje to rychlost reakcí a přehlednost.
Checklist pro produkční připravenost CI/CD
- Automatizované buildy a testy na každém PR/MR, minimálně unit + integrační.
- Bezpečnostní skeny (SAST, SCA, IaC, image), politika tajemství a rotace klíčů.
- Reprodukovatelné buildy, imutable artefakty, podepisování a SBOM.
- Canary/Blue-Green strategie, automatické post-deploy validace, definovaný rollback.
- Automatizované migrace DB a databázový expand/contract pattern.
- Ephemerální prostředí pro PR/MR, Helm/Kustomize šablony, IaC v repozitáři.
- Observabilita (logy, metriky, trace), alerty a SLO pro rozhodování o propagaci.
- Auditní stopa a pravidla pro schvalování, DORA metriky a cíle zlepšování.
Závěr
Silná CI/CD pipeline je víc než nástroj: je to disciplína. Kombinace malých releasů, důsledného testování, bezpečnostních kontrol, ephemerálních prostředí a řízeného nasazení minimalizuje riziko a maximalizuje rychlost dodávky. Investice do automatizace, observability a governance se vrací v podobě vyšší kvality, rychlejší inovace a spokojenějších uživatelů.