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.

Kategorie: Softwarový vývojAktualizováno

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

  1. 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.yaml
  2. 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 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

  1. What is Continuous Integration?(otevře se v novém okně)Amazon Web Services
  2. What is Continuous Delivery?(otevře se v novém okně)Amazon Web Services
  3. DevOps tech: Continuous integration(otevře se v novém okně)Google Cloud
  4. Deployments(otevře se v novém okně)Kubernetes
  5. Pro Git(otevře se v novém okně)Git

Související pojmy

Potřebujete to vyřešit v praxi?

Poradíme, jak na to ve vašem projektu

Vysvětlit pojem je jedna věc, navrhnout kolem něj funkční řešení druhá. Ozvěte se a probereme, co dává smysl u vás.