Zkratka proContinuous Integration / Continuous DeliveryTakéContinuous Integration, Continuous Delivery, Continuous DeploymentPokročilý
Definice
CI/CD je sada postupů a automatizací, které průběžně integrují změny kódu, ověřují je testy a připravují nebo provádějí nasazení aplikace. Cílem je zkrátit cestu od commitu k bezpečnému vydání, snížit ruční práci a rychle odhalit chyby v build procesu, konfiguraci nebo samotném kódu.
Co v CI/CD automatizuje pipeline
CI/CD spojuje změny ve zdrojovém kódu s opakovatelným procesem, který ověří kvalitu a připraví aplikaci k vydání. Typická pipeline se spustí po commitu nebo po vytvoření pull requestu. Stáhne závislosti, sestaví projekt, spustí testy, vytvoří artefakt a podle pravidel jej předá do dalšího prostředí.
Continuous Integration řeší hlavně časté slučování změn. Vývojář nemá několik dní pracovat v izolované větvi, protože konflikt se pak odhalí pozdě. Automatické testy a build dávají týmu rychlou zpětnou vazbu: změna buď zapadá do aktuálního stavu aplikace, nebo pipeline zastaví další krok.
stages:
- test
- build
- deploy
test:
script: npm test
build:
script: docker build -t app:$COMMIT_SHA .
deploy_staging:
script: kubectl apply -f k8s/staging.yaml
Rozdíl mezi kontinuálním dodáním a automatickým nasazením
Zkratka CD se používá ve dvou blízkých významech. Continuous Delivery znamená, že software je po úspěšném průchodu pipeline připravený k vydání, ale produkční krok může schvalovat člověk. Continuous Deployment jde dál: úspěšná změna se po splnění kontrol nasadí do produkce automaticky.
Volba mezi těmito variantami závisí na riziku, regulaci a schopnosti rychle vracet změny. Interní webová služba může nasazovat každou bezpečnou změnu sama. Bankovní systém, zdravotnická aplikace nebo kritická infrastruktura často potřebují ruční schválení, auditní stopu a řízené okno pro nasazení.
Kde CI/CD snižuje riziko změn
CI/CD neslibuje, že každá změna bude správná. Smyslem je zmenšit dávku práce, zrychlit detekci problému a odstranit ruční kroky, které se špatně opakují. Pipeline může obsahovat unit testy, integrační testy, kontrolu licencí, bezpečnostní sken kontejneru, statickou analýzu, migrace databáze a postupné nasazení.
Nejcennější je krátká zpětná vazba. Když test spadne pět minut po commitu, autor ještě ví, co měnil. Když se chyba objeví až při měsíčním release, tým hledá příčinu mezi desítkami změn. Dobře navržená pipeline proto nemá být jen dekorace v repozitáři, ale závazná brána mezi kódem a provozem.
Dva průchody CI/CD pipeline
Oprava chyby v API
Vývojář opraví validaci vstupu v REST API a odešle pull request. Pipeline spustí testy pro chybové stavy, sestaví Docker image a nasadí kandidáta do stagingu. Tester ověří konkrétní scénář a po schválení se stejný artefakt nasadí do produkce, takže se nekompiluje jiný build.
Nasazení migrace databáze
Tým přidá nový sloupec do tabulky objednávek a pipeline nejdřív spustí migraci proti testovací databázi. Integrační testy ověří, že starší záznamy aplikaci nerozbijí. Produkční krok zůstane ručně schvalovaný, protože případný rollback databázového schématu vyžaduje větší opatrnost než běžná změna frontendu.
Příklady z praxe
Oprava chyby v API
Vývojář opraví validaci vstupu v REST API a odešle pull request. Pipeline spustí testy pro chybové stavy, sestaví Docker image a nasadí kandidáta do stagingu. Po schválení se stejný artefakt nasadí do produkce, takže se nekompiluje jiný build.
stages: - test - build - deploy test: script: npm test build: script: docker build -t app:$COMMIT_SHA . deploy_staging: script: kubectl apply -f k8s/staging.yamlNasazení migrace databáze
Tým přidá nový sloupec do tabulky objednávek a pipeline nejdřív spustí migraci proti testovací databázi. Integrační testy ověří, že starší záznamy aplikaci nerozbijí. Produkční krok zůstane ručně schvalovaný, protože rollback databázového schématu vyžaduje větší opatrnost.
Časté omyly
- MýtusCI/CD znamená, že se všechno automaticky nasazuje do produkce.
- Ve skutečnostiCI/CD může končit ručním schválením produkčního vydání. Automatické nasazení je jen jedna varianta CD, vhodná hlavně tam, kde tým dobře zvládá testy, monitoring a rollback.
- MýtusKdyž máme CI/CD, nepotřebujeme testery.
- Ve skutečnostiCI/CD automatizuje opakovatelné kontroly, ale nenahrazuje průzkumné testování, posouzení použitelnosti ani ověření neobvyklých scénářů. Tester se často přesouvá blíž k návrhu testů a rizik, ne mizí z procesu.
Časté dotazy
- Nahrazuje CI/CD code review?
- CI/CD pipeline by neměla nahrazovat code review, protože automatizace a lidská kontrola hledají jiné typy problémů. Testy dobře odhalí regresi, špatný build nebo porušení technických pravidel. Code review lépe zachytí nejasný návrh, rizikové API, zbytečnou složitost nebo dopad na čitelnost. V praxi se pull request často sloučí až po úspěšné pipeline i po schválení recenzentem.
- Potřebuje CI/CD vždy Kubernetes?
- CI/CD může fungovat i bez Kubernetes, protože pipeline je proces nad kódem, testy a vydáváním, ne konkrétní orchestrace kontejnerů. Malý projekt může nasazovat na virtuální server přes SSH, serverless platformu, PaaS nebo statický hosting. Kubernetes dává smysl hlavně tam, kde tým provozuje více služeb, potřebuje škálování, deklarativní konfiguraci a řízené rollouty.
- Vyplatí se CI/CD u malého projektu?
- CI/CD pro malý tým dává smysl, když ruční testování a nasazování začíná brzdit vydávání nebo vytváří chyby z nepozornosti. První verze nemusí být složitá: stačí automatický build, základní testy a nasazení do testovacího prostředí. Hodnota roste s počtem vývojářů, služeb a release cyklů, ale i dvoučlenný tým získá opakovatelný postup.
- Proč je CI/CD pipeline někdy pomalá?
- CI/CD pipeline nemusí být pomalá kvůli samotné automatizaci, ale kvůli špatně rozděleným kontrolám. Rychlé testy by měly běžet na každém commitu, zatímco drahé end-to-end scénáře mohou běžet po sloučení nebo před releasem. Tým často zrychlí pipeline paralelizací, cache závislostí, menšími testovacími sadami a odstraněním kroků, které nedávají rozhodovací hodnotu.
Zdroje
- What is Continuous Integration?(otevře se v novém okně)
- What is Continuous Delivery?(otevře se v novém okně)
- DevOps tech: Continuous integration(otevře se v novém okně)
- Deployments(otevře se v novém okně)
- Pro Git(otevře se v novém okně)