Co je CI/CD: definice, cíle a přínosy
CI/CD (Continuous Integration / Continuous Delivery / Continuous Deployment) je soubor postupů, nástrojů a kulturních principů, jejichž cílem je bezpečně a rychle doručovat změny softwaru do provozu. Continuous Integration automatizuje sestavení a testování každé změny v hlavní větvi. Continuous Delivery udržuje artefakt ve stavu připraveném k vydání a umožňuje kdykoli provést řízené nasazení. Continuous Deployment jde o krok dál a po úspěšných kontrolách nasazuje změny automaticky bez manuálního zásahu. Hlavními přínosy jsou kratší lead time, vyšší kvalita, nižší riziko při vydávání a rychlá zpětná vazba.
Základní principy a stavební kameny
- Malé, časté změny: minimalizují riziko a urychlují učení.
- Automatizace a opakovatelnost: pipeline jako kód, deterministické buildy a testy.
- Posun kvality a bezpečnosti doleva: statická analýza, bezpečnostní skeny a testy spouštěné co nejdříve.
- Průběžná pozorovatelnost: metriky, logy a tracing pro rychlou diagnostiku.
- Možnost návratu: bezpečné rollbacky, feature flagy a databázové strategie umožňující vrátit změny.
Architektura CI/CD pipeline: vrstvy a toky
- Zdrojový kód a verzování: Git (strategie větvení, pull/merge requesty, revize kódu).
- Build a závislosti: deterministické sestavení, zamknuté verze balíčků, cache buildů.
- Testovací vrstvy: unit → contract → integrační → end-to-end → nefunkční (výkon, bezpečnost).
- Tvorba artefaktů: binární soubory, kontejnery, Helm chart, sbalené balíčky front-endu.
- Publikace artefaktů: registry (OCI, Maven/NPM), repozitáře artefaktů.
- Zajištění prostředí: IaC (Terraform, Pulumi), šablony prostředí, dočasná preview prostředí.
- Nasazení: skripty/operátory, GitOps, orchestrace vydávání, schvalovací brány.
- Kontroly po nasazení: smoke testy, kontroly stavu, automatizovaný rollback.
Strategie větvení a integrace
- Vývoj založený na hlavní větvi (trunk-based development): krátké větve, rychlé slučování, feature flagy pro nedokončené části.
- GitFlow (v omezené míře): release/hotfix větve pro organizace s delšími cykly – vyšší režie.
- Integrace řízená přes PR: povinné kontroly (build, testy, skeny), required reviews a status checks.
Spouštěče (triggery) a škálování běhů
- Při commitu/pushnutí: rychlá základní validace (lint, jednotkové testy).
- Při pull/merge requestu: plný build, testy, bezpečnostní kontroly, generování náhledů.
- Při tagu/vydání: tvorba finálního artefaktu, podpisy, publikace do registrů.
- Plánované běhy: noční regresní sady, auditní skeny, pravidelné chaos testování.
Deterministické buildy a správa závislostí
- Lockfiles a připnutí verzí:
package-lock.json,poetry.lock,go.sum,requirements.txts hashem. - Reprodukovatelné kontejnery: vícestupňový Dockerfile, minimální základní image, explicitní digesty (
@sha256), SBOM (Software Bill of Materials). - Cache a hospodaření s artefakty: ukládání závislostí a výstupů buildu mezi běhy, klíčování cache podle kontrolního součtu.
Testovací pyramida a kvalita
- Lint a statická analýza: ESLint, Pylint, Checkstyle; formátování (Prettier, Black).
- Jednotkové testy: rychlé, izolované, s vysokým pokrytím kritické logiky.
- Kontraktní a komponentové testy: stabilní rozhraní mezi službami, testy komponent UI.
- Integrační a E2E testy: realistické prostředí, testování datových toků a vedlejších efektů.
- Nefunkční testy: výkon (zátěžové, dlouhodobé), spolehlivost (chaos), kompatibilita prohlížečů.
Bezpečnost v CI/CD (DevSecOps)
- SAST/DAST/IAST: statická a dynamická analýza, interaktivní skeny během integračních běhů.
- SCA a SBOM: skenování zranitelností závislostí a generování přehledu komponent.
- Tajné údaje a identity: žádné tajné údaje v repozitáři; použití OIDC workload identity, krátkodobých tokenů, KMS/Secrets Manager.
- Dodavatelský řetězec: podepisování artefaktů (Sigstore/Cosign), zásady ověřující původ (policy as code), izolované běhové prostředí.
Artefakty a registry
- Repozitáře artefaktů: Maven/NuGet/NPM registry, OCI registry pro kontejnery a Helm chart.
- Verzování a metadata: semver, čísla buildu, provenance, attestations.
- Uchovávání a úklid: zásady uchovávání, deduplikace, archivace dlouhodobých vydání.
Prostředí, IaC a dočasné náhledy
- Infrastructure as Code: Terraform/Pulumi, kontrola prostřednictvím revize kódu, běhy s
plan–>applyv pipeline. - Šablony prostředí: identická schémata staging/QA/production, parametrizace pomocí proměnných a secrets.
- Dočasná prostředí: automatická tvorba a rušení prostředí pro každý PR, náhledy UI a sandboxová data.
Strategie nasazení a řízení rizik
| Strategie | Výhody | Nevýhody | Vhodné pro |
|---|---|---|---|
| Blue-Green | Okamžité přepnutí, rychlý rollback | Vyšší náklady na dvojí prostředí | Kritické systémy, nízká tolerance výpadku |
| Canary | Postupné zpřístupňování, měřené riziko | Složitější orchestrátor a metriky | Velké uživatelské základny, ověřování A/B |
| Rolling | Bez odstávky, běžné v K8s | Bez kvalitního monitoringu mohou problémy zůstat skryté | Bezstavové služby |
| Feature flagy | Oddělení vydání od aktivace, cílení | Nutnost správy a úklidu flagů | Produktové experimenty, postupné zavádění |
Databázové změny a kompatibilita
- Expand-migrate-contract: nejprve přidat nové schéma, nasadit kompatibilní aplikaci a poté odstranit staré části.
- Migrační nástroje: Liquibase, Flyway; verze migrací jako součást artefaktu.
- Bezpečné rollbacky: idempotentní skripty, zálohy, feature toggles pro schémata.
Observabilita po nasazení
- SLO/SLI a rozpočet na chyby: jasné cíle dostupnosti a výkonu jako brány pro vydání.
- Monitoring: metriky latence/chybovosti, syntetické testy, RUM pro front-end.
- Tracing a logy: distribuované trasování (OpenTelemetry), korelace s vydáním a číslem buildu.
- Automatizovaný rollback: watchdog sledující metriky spouští návrat k předchozí verzi.
Kontroly, schvalování a compliance
- Brány kvality: minimální pokrytí, žádné kritické zranitelnosti, výkonnostní limity.
- Princip čtyř očí: povinná revize a oddělení rolí (separation of duties).
- Auditní stopa: podpisy, historie artefaktů, schvalovací workflow.
- Policy as code: OPA/Conftest, validace IaC a manifestů před nasazením.
Pipeline jako kód a osvědčené návrhové postupy
- Modularita: znovupoužitelné kroky, knihovny workflow, šablony.
- Idempotence: opakovaný běh vede k totožnému výsledku, žádné skryté stavy.
- Paralelizace: souběžné úlohy (testovací shardy), chování fail-fast.
- Podmínky a matice: multiplatformní buildy (OS/architektura/verze runtime) bez duplikace kódu.
- Bezpečný přístup: princip minimálních oprávnění pro běhové identity a klíče pro nasazení.
Monorepo vs. polyrepo a mikroslužby
- Monorepo: centralizované grafy závislostí, sdílené pipeline, incremental builds; je nutná chytrá detekce změn.
- Polyrepo: jednodušší vlastnictví, menší dosah dopadů; hůře se verzují změny napříč repozitáři.
- Mikroslužby: kontrakty, kontraktní testy, koordinace zavádění změn a schémat, nezávislé kadence vydávání.
Metriky výkonnosti doručování (DORA)
| Metrika | Co měří | Cíl |
|---|---|---|
| Frekvence nasazení | Kolikrát za období nasazujete | Vysoká a stabilní |
| Lead time for changes | Čas od commitu do produkce | Krátký (hodiny–dny) |
| MTTR | Doba obnovy po incidentu | Minuty–hodiny |
| Change failure rate | Podíl nasazení, která vedou k incidentu | Nízký (pod 15 %) |
GitOps a cloud-native nasazování
- Git jako zdroj pravdy: požadovaný stav je uložen v repozitáři; reconcilery clusteru (Argo CD, Flux) zajišťují jeho shodu.
- Deklarativní manifesty: Kubernetes, Helm/Kustomize; progressive delivery (Argo Rollouts, Flagger).
- Oddělení buildu od nasazení: CI vytváří artefakt, CD provádí deklarativní aplikaci změn.
Specifika front-endu, mobilních aplikací a dat/ML
- Front-end: matice buildů pro prohlížeče, vizuální regrese, metriky balíčků a Web Vitals jako brána.
- Mobilní aplikace: podepisování, distribuční kanály (TestFlight/Play), feature flagy a experimenty, řízené zavádění.
- Data a ML (MLOps): verzování dat/sad, reprodukovatelné trénování, registr modelů, monitoring férovosti a driftu, schvalování před inferencí.
Ekonomika a ekologie CI/CD
- Pipeline zohledňující náklady: caching, paralelizace s limity, běhové prostředí on-demand, vypínání neaktivních runnerů.
- Green DevOps: slučování úloh, plánování energeticky náročných testů mimo špičku, sledování uhlíkové stopy buildů.
Kontrolní seznam pro robustní CI/CD
- Pipeline a infrastruktura jako kód, verzované a podléhající revizi.
- Spolehlivé testy se stabilní sadou dat a jasně definovanými podmínkami bran.
- Bezpečnostní skeny (SAST/SCA/DAST) a SBOM generovaný pro každý build.
- Deterministické artefakty, podepsané a uložené v registru s nastavenou dobou uchovávání.
- Prostředí vytvořená pomocí IaC, dočasné preview prostředí pro PR.
- Postupné zavádění (canary/flagy) a automatizovaný rollback.
- Observabilita napojená na vydání (metriky, logy, tracing, alerting).
- Metriky DORA, retrospektivy a průběžné zlepšování pipeline.
Antivzory, kterým se vyhnout
- Prostředí typu „snowflake“: ručně konfigurované servery bez IaC.
- Tajné údaje uložené v repozitáři: místo toho používejte úložiště tajných údajů a krátkodobé identity.
- Monolitická, pomalá pipeline: chybí paralelizace, caching a selektivní spouštění pouze pro změněné moduly.
- Nestabilní testy: podkopávají důvěru; je třeba je umístit do karantény, opravit nebo odstranit.
- Nedostatek metrik a zpětné vazby: bez měření nelze dosahovat zlepšení.
Závěr: CI/CD jako provozní schopnost organizace
CI/CD není pouze nástroj nebo skript – je to disciplína, která propojuje vývoj, bezpečnost a provoz do jednoho průběžného toku hodnoty. Úspěch vyžaduje malé a časté změny, automatizované a deterministické buildy, kvalitní testování, deklarativní infrastrukturu, bezpečnost zabudovanou do procesu a průběžné měření výsledků. Taková pipeline umožňuje rychle a spolehlivě doručovat změny, které mají skutečný dopad na podnikání.
