Automatické testování a deploy

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

  1. Automatizované buildy a testy na každém PR/MR, minimálně unit + integrační.
  2. Bezpečnostní skeny (SAST, SCA, IaC, image), politika tajemství a rotace klíčů.
  3. Reprodukovatelné buildy, imutable artefakty, podepisování a SBOM.
  4. Canary/Blue-Green strategie, automatické post-deploy validace, definovaný rollback.
  5. Automatizované migrace DB a databázový expand/contract pattern.
  6. Ephemerální prostředí pro PR/MR, Helm/Kustomize šablony, IaC v repozitáři.
  7. Observabilita (logy, metriky, trace), alerty a SLO pro rozhodování o propagaci.
  8. 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ů.

Poradňa

Potrebujete radu? Chcete pridať komentár, doplniť alebo upraviť túto stránku? Vyplňte textové pole nižšie. Ďakujeme ♥