Nástroje DevOps: Jenkins, GitLab CI a Terraform – pipeline

Nástroje DevOps: Jenkins, GitLab CI, Terraform – pipeline

Proč právě Jenkins, GitLab CI a Terraform

Praxe DevOps propojuje vývoj, testování a provoz do automatizovaného, měřitelného a opakovatelného procesu. Jenkins a GitLab CI jsou nástroje pro Continuous Integration/Continuous Delivery (CI/CD), zatímco Terraform je standardem pro Infrastructure as Code (IaC). Společně tvoří osu moderního softwarového dodavatelského řetězce: od změny v repozitáři přes sestavení a testy až po deterministické nasazení infrastruktury a aplikací.

Srovnání: silné a slabé stránky nástrojů

Nástroj Primární účel Silné stránky Úskalí Typické použití
Jenkins CI/CD server s pluginy Obrovský ekosystém pluginů, flexibilní pipeline, provoz on-prem Správa a údržba, bezpečnost pluginů, vlastní škálování Heterogenní prostředí, integrace se staršími systémy, vlastní pracovní postupy
GitLab CI Integrované CI/CD v platformě Git Konfigurace YAML v repozitáři, správa runnerů, integrované MR, artefakty Závislost na GitLabu, omezení v pokročilých okrajových případech Pracovní postup „repo → MR → pipeline → nasazení“, DevSecOps na jednom místě
Terraform Infrastructure as Code Deklarativní syntaxe, široká podpora providerů, moduly Správa stavu, odchylky od požadovaného stavu, pořadí změn, zásady a oprávnění Zřizování cloudových/on-prem zdrojů, standardizace multicloudu

Architektura Jenkinsu: controllery, agenti a pluginy

  • Controller orchestruje buildy, plánuje joby, spravuje frontu a zajišťuje napojení pluginů (SCM, notifikace, úložiště přihlašovacích údajů).
  • Build agenti (dříve „slaves“) provádějí kroky pipeline; lze je provozovat jako VM, kontejnery nebo dočasné pody v Kubernetes.
  • Pipeline as Code prostřednictvím Jenkinsfile (deklarativní nebo skriptovaný styl) – verzování v repozitáři, revize přes MR/PR.
  • Bezpečnost: minimum pluginů, pravidelné aktualizace LTS, Credentials Binding, oddělené identity pro SCM a registry.

GitLab CI: runnery, executory a pipeline v YAML

  • GitLab Runner je exekuční agent; režimy shell, Docker, Kubernetes, custom. Sdílené a specifické runnery.
  • .gitlab-ci.yml definuje fáze (stages) a joby s rules, needs, artifacts, cache, environment a ručními branami manual.
  • Integrovaný ekosystém: MR pipeline, kvalita kódu, SAST/DAST, skenování závislostí, důkazy o vydání, registr kontejnerů.
  • Multi-project pipelines a child/parent pipeline pro rozdělení monolitů na doménové celky.

Terraform: moduly, provideři, state a workspaces

  • Moduly: znovupoužitelné balíčky zdrojů s proměnnými a výstupy; vytvářejte „platformové“ moduly (síť, databáze, observabilita).
  • State: zdroj pravdy o existujících prostředcích; ukládejte ho do vzdáleného backendu (S3/GCS + zamykání pomocí DynamoDB/Cloud SQL) s verzováním.
  • Workspaces: oddělení stavů pro prostředí (dev/stage/prod); alternativou jsou samostatné adresáře nebo repozitáře.
  • Policy-as-Code: OPA/Rego nebo Sentinel pro zásady (např. zákaz veřejných bucketů S3, limity velikosti instancí).

Vzorový tok CI/CD: build → test → security → image → infra → deploy

  1. Build a test: kompilace/instalace závislostí, unit/integration testy, generování artefaktů.
  2. Bezpečnostní brány: SAST, audit závislostí, skenování obrazu kontejneru – pipeline se při nalezení kritických CVE ukončí chybou.
  3. Image: sestavení obrazu Dockeru s multi-stage, označení tagy app:commit-sha + app:semver, odeslání do registru.
  4. Infrastruktura: Terraform plan (revize, schválení), následně apply se zamčeným stavem a auditním protokolem.
  5. Nasazení: nasazení do cílového prostředí (Kubernetes/VM), smoke a health-checks, případně canary/blue-green.

Jenkinsfile: doporučené konstrukce

  • Declarative pipeline s bloky agent, options, environment, stages, post – je přehlednější a bezpečnější než skriptovaný styl.
  • Shared Libraries pro společné kroky (lint/test/build/publish), centralizované v jednom repozitáři.
  • Parallel pro testovací matice, when a post pro podmínky a oznámení.
  • Credential binding a withDockerRegistry pro práci s registrem bez ukládání tajemství v kódu.

GitLab CI YAML: vzory a anti-patterny

  • Rules místo only/except, needs pro DAG a rychlejší spouštění navazujících jobů.
  • Include pro import sdílených šablon, extends pro princip DRY a odstranění duplicit.
  • Artefakty a cache: artefakty pro předávání binárních souborů a reportů, cache pro závislosti (s klíčem odvozeným z hashe souboru lockfile).
  • Prostředí a nasazení: mapování jobů na prostředí, stop/review apps, ruční brány manual pro produkci.

Terraform v CI: bezpečný životní cyklus

  • Init s definovaným backendem a verzemi providerů uzamčenými v required_providers a required_version.
  • Validate → fmt → tflint: rychlé statické kontroly před plan.
  • Plan jako artefakt ke schválení (MR/komentář k MR), Apply pouze na chráněných větvích se schválením a uzamčením.
  • Správa stavu: povinné zamykání a šifrování, rotace přístupů, oddělené identity pro jednotlivá prostředí.

Škálování a spolehlivost: orchestraci agentů a runnerů

  • Kubernetes: dočasný build pod pro každý job (Jenkins Kubernetes plugin / GitLab Kubernetes executor) – izolace, čisté prostředí, automatické škálování.
  • Automatické škálování runnerů: horizontální škálování podle fronty jobů, limity souběžného běhu pro ochranu závislých služeb (DB, registry).
  • Build cache: cache pro jednotlivé větve, sdílené registry základních obrazů, lokální zrcadla závislostí (Composer/NPM/PyPI) pro zajištění stability.

Bezpečnost a compliance v DevOps

  • Princip nejnižších oprávnění: oddělené identity pro CI, registry a cloud; krátkodobé tokeny a federace OIDC místo statických klíčů.
  • Správa tajemství: integrované trezory (HashiCorp Vault, cloudové KMS/Secrets), nikdy neukládejte tajemství do repozitáře ani artefaktů.
  • Dodavatelský řetězec: podepisování artefaktů (Sigstore/Cosign), SBOM (CycloneDX/SPDX), ověřování ve fázi nasazení.
  • Audit: auditní protokoly přístupů a operací apply, zásady schvalování, povinné revize MR.

GitOps a propojení s Terraformem

  • Git jako zdroj pravdy: všechny změny (aplikace, manifesty k8s, kód Terraformu) provádějte přes MR s revizí a kontrolami CI.
  • Argo CD/Flux pro deklarativní synchronizaci aplikací; Terraform spravuje základní zdroje, GitOps aplikační manifesty.
  • Oddělení domén: repo platform-infra, repo app-infra a repo apps – jasné hranice odpovědností a oprávnění.

Měření a observabilita CI/CD

  • Metriky DORA: frekvence nasazení, doba potřebná k realizaci změny, MTTR, míra chyb při nasazení.
  • Metriky pipeline: doba jobů p50/p95, úspěšnost, nestabilita testů, velikost artefaktů, vytížení runnerů.
  • Tracing: OpenTelemetry v krocích buildu pro korelaci s běhovými metrikami aplikací.

Kvalita a testování v pipeline

  • Shift-left: lintery, statická analýza a unit testy ještě před sestavením obrazu.
  • Contract testing a e2e smoke v dočasném prostředí (Review Apps) před nasazením.
  • Výkonnostní testy (k6/JMeter) jako brána pro kritické služby, s výchozí hodnotou a automatickým porovnáním.

Náklady a efektivita

  • Dočasné běhy v Kubernetes/na spot instancích s limity CPU/RAM a štítky cost allocation.
  • Cache a registry: omezení přenosů, vrstvení obrazů, sdílené základní obrazy pro jednotlivé týmy/technologické zásobníky.
  • Paralelizace vs. saturace: nastavte limity tak, aby neovlivňovaly externí služby (omezení rychlosti API, databáze).

Časté anti-patterny a jak se jim vyhnout

  • Monolitický Jenkins s desítkami pluginů: udržujte počet pluginů na minimu, oddělte controllery, používejte Shared Libraries.
  • Globální sdílené účty: vždy používejte individuální identity a audit; rotujte klíče, nastavujte krátkou dobu platnosti tokenů.
  • Terraform bez vzdáleného stavu/zamykání: riziko kolizí a ztráty konzistence; vždy používejte vzdálený backend a zamykání.
  • Ruční zásahy do infrastruktury: vedou ke vzniku odchylek; pravidelně spouštějte terraform plan v cron pipeline a detekujte odchylky.
  • Nestabilní testy: odstraňte je z pipeline nebo stabilizujte; nestabilní test není totéž co legitimní selhání.

Migrační strategie: od ad hoc skriptů k platformě DevOps

  1. Inventarizace buildů, skriptů a prostředí; zmapování tajemství a přístupů.
  2. Pilotní repo s čistým CI a modulem Terraformu; definice standardů (lint, test, skenování).
  3. Šablony (.gitlab-ci.yml / Jenkins Shared Lib / Terraform module) publikujte jako produkt pro týmy.
  4. Postupné zapojování aplikací, měření metrik DORA a nákladů, vyhodnocení.

Osvědčené postupy v kostce

  • Pipeline as Code a Infrastructure as Code všude; vše verzujte, revidujte a auditujte.
  • Dočasné spouštění jobů a reprodukovatelná prostředí (přesně určené obrazy, lockfile závislostí).
  • Bezpečnost: federace OIDC mezi CI a cloudem, minimální oprávnění, trezor tajemství, zásady jako kód.
  • Měřte a zlepšujte: DORA, doba buildů p95, míra nestabilních testů, MTTR; automatizované reporty v týmových dashboardech.
  • Modularita: moduly Terraformu, sdílené kroky pipeline, opakovatelné šablony pro projekty.

Závěr

Kombinace Jenkinsu/GitLab CI a Terraformu umožňuje vybudovat robustní, bezpečný a škálovatelný řetězec DevOps. Jenkins se hodí pro vysoce přizpůsobené scénáře a heterogenní integrace, GitLab CI vyniká jednoduchostí a integrací se správou verzí a revizemi kódu, Terraform přináší deterministickou správu infrastruktury. Klíčem k úspěchu je disciplína při návrhu pipeline, zabezpečení a správě stavu, důsledné měření a standardizace prostřednictvím šablon a modulů.