Proč právě Jenkins, GitLab CI a Terraform
Praktiky DevOps integrují vývoj, testování a provoz do automatizovaného, měřitelného a opakovatelného procesu. Jenkins a GitLab CI představují nástroje pro Continuous Integration/Continuous Delivery (CI/CD), zatímco Terraform je standardem pro Infrastructure as Code (IaC). Společně vytvářejí páteř moderního softwarového dodavatelského řetězce: od změny v repozitáři přes build a testování 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í, legacy integrace, custom workflow |
| GitLab CI | Integrované CI/CD v Git platformě | YAML konfigurace v repozitáři, správa runnerů, integrované MR, artefakty | Závislost na GitLab, omezení pokročilých edge případů | Workflow „repo → MR → pipeline → nasazení“, DevSecOps v jednom |
| Terraform | Infrastructure as Code | Deklarativní syntaxe, široká podpora providerů, moduly | Správa stavu, drifty, pořadí změn, zásady a oprávnění | Provisioning cloud/on-prem zdrojů, multi-cloud standardizace |
Architektura Jenkins: controllery, agenti a pluginy
- Controller orchestruje buildy, plánuje úlohy, spravuje frontu a integruje pluginy (SCM, notifikace, credential store).
- Build agenti (dříve „slaves“) vykonávají kroky pipeline; lze je provozovat jako VM, kontejnery nebo ephemerální pody v Kubernetes.
- Pipeline as Code prostřednictvím Jenkinsfile (deklarativní nebo skriptovaný styl) – verzování v repozitáři, revize prostřednictvím MR/PR.
- Bezpečnost: minimální množství pluginů, pravidelné aktualizace LTS, Credentials Binding, oddělené identity pro SCM a registry.
GitLab CI: runneři, exekutory a YAML pipeline
- GitLab Runner je exekuční agent; režimy shell, Docker, Kubernetes, custom. Sdílené versus specifické runneři.
- .gitlab-ci.yml definuje fáze (stages) a úlohy s pravidly rules, závislostmi needs, artifacts, cache, prostředím environment a manuálními branami manual.
- Integrovaný ekosystém: MR pipeline, code quality, SAST/DAST, dependency scanning, evidence releasů, container registry.
- Multi-project pipelines a child/parent pipeline pro rozdělení monolitů na doménové celky.
Terraform: moduly, providery, stav a workspaces
- Moduly: znovupoužitelné balíčky zdrojů s proměnnými a výstupy; doporučuje se vytvářet „platformové“ moduly (síť, databáze, observabilita).
- Stav (State): zdroj pravdy pro existující zdroje; ukládá se do vzdáleného backendu (S3/GCS + zamykání pomocí DynamoDB/Cloud SQL) s verzováním.
- Workspaces: separace stavů pro prostředí (dev/stage/prod); alternativou jsou samostatné adresáře či repozitáře.
- Policy-as-Code: OPA/Rego nebo Sentinel pro definování zásad (např. zákaz veřejných S3, limity velikosti instancí).
Vzorový CI/CD tok: build → test → security → image → infrastruktura → nasazení
- Build a test: kompilace / instalace závislostí, unit/integration testy, generování artefaktů.
- Security gates: SAST, audit závislostí, skenování kontejnerových image – pipeline selhává při nalezení kritických CVE.
- Image: build Docker image s multi-stage, tagování
app:commit-sha+app:semver, push do registry. - Infra: Terraform plan (revize, schválení), následně apply s uzamčeným stavem a auditním záznamem.
- Nasazení: rollout do cílového prostředí (Kubernetes/VM), smoke a health-checky, případně canary/blue-green deployment.
Jenkinsfile: doporučené konstrukce
- Declarative pipeline s bloky agent, options, environment, stages, post – čitelnější a bezpečnější než skriptovaný styl.
- Shared Libraries pro společné kroky (lint/test/build/publish), centralizace do jednoho repozitáře.
- Parallel pro testovací matice, when a post pro podmínky a notifikace.
- Credential binding a withDockerRegistry pro práci s registry bez ukládání tajemství v kódu.
GitLab CI YAML: vzory a anti-vzory
- Rules místo only/except, needs pro DAG a rychlejší spuštění downstream jobů.
- Include pro import sdílených šablon, extends pro DRY a deduplikaci konfigurace.
- Artifacts a cache: artefakty pro předání binárek a reportů, cache pro závislosti (s klíčem dle hashe lockfile).
- Environment & deployment: mapování úloh na prostředí, stop/review apps, manuální brány manual pro produkční prostředí.
Terraform v CI: bezpečný životní cyklus
- Init s definovaným backendem a verzemi providerů zajištěnými v
required_providersarequired_version. - Validate → fmt → tflint: rychlé statické kontroly před plan.
- Plan jako artefakt ke schválení (MR / komentář MR), apply pouze na chráněných branchech s approval a lock.
- Správa stavu: povinné zamykání a šifrování, rotace přístupů, oddělené identity pro různé prostředí.
Škálování a spolehlivost: orchestraci agentů a runnerů
- Kubernetes: ephemerální build pod pro každý job (Jenkins Kubernetes plugin / GitLab Kubernetes executor) – izolace, čistota prostředí, autoscaling.
- Auto-scaling runnerů: horizontální škálování podle fronty jobů, limity paralelismu pro ochranu závislých služeb (databáze, registry).
- Build cache: per-branch cache, sdílené registry základních image, lokální mirror závislostí (Composer/NPM/PyPI) pro zajištění stability.
Bezpečnost a compliance v DevOps
- Princip nejmenších privilegií: oddělené identity pro CI, registry, cloud; krátkodobé tokeny a OIDC federace místo statických klíčů.
- Správa tajemství: integrované trezory (HashiCorp Vault, cloud KMS / Secrets), nikdy nezapisovat tajemství do repozitářů nebo artefaktů.
- Supply-chain: podepisování artefaktů (Sigstore/Cosign), SBOM (CycloneDX/SPDX), verifikace v deploy fázi.
- Audit: auditní logy přístupů a operací apply, politika schvalování, povinné recenze MR.
GitOps a integrace s Terraformem
- Git jako zdroj pravdy: všechny změny (aplikace, manifesty k8s, Terraform kód) probíhají přes MR s recenzí a kontrolami CI.
- Argo CD / Flux pro deklarativní synchronizaci aplikací; Terraform spravuje základní zdroje, GitOps vrstva spravuje aplikační manifesty.
- Oddělení domén: repozitáře platform-infra, app-infra a apps – jasná hranice odpovědností a oprávnění.
Měření a observabilita CI/CD
- DORA metriky: frekvence nasazení, lead time pro změnu, MTTR, míra chyb při nasazení.
- Pipeline metriky: p50/p95 doba běhu jobů, úspěšnost, flakiness testů, velikost artefaktů, vytížení runnerů.
- Tracing: OpenTelemetry v build krocích pro korelaci s runtime metrikami aplikací.
Kvalita a testování v pipeline
- Shift-left: lintery, statická analýza, jednotkové testy prováděné před buildem image.
- Contract testing a e2e smoke testy na dočasném prostředí (Review Apps) před nasazením.
- Perf testy (k6/JMeter) jako bezpečnostní brána pro kritické služby, s baseline a automatickým porovnáním výsledků.
Náklady a efektivita
- Ephemerální běhy v Kubernetes / spot instancích s limity CPU/RAM a tagy pro cost allocation.
- Cache a registry: minimalizace přenosů, vrstvení image, sdílené základní image na tým / stack.
- Paralelizace vs. saturace: nastavujte limity tak, aby neovlivnily externí služby (rate-limit API, databáze).
Časté anti-patterny a jak se jim vyhnout
- Monolitický Jenkins s desítkami pluginů: udržujte minimum pluginů, oddělte controllery, používejte Shared Libraries.
- Globální sdílené účty: vždy používejte individuální identity a audit; rotace klíčů, krátké TTL tokenů.
- Terraform bez remote state a zamykání: riziko kolizí a nekonzistence; vždy používejte remote backend a zamykání stavu.
- Manuální zásahy do infrastruktury: vedou ke driftům; pravidelné provádění terraform plan v plánovaných pipeline, detekce driftu.
- Flaky testy: odstraňte je z pipeline nebo stabilizujte; oddělte nestabilní testy od legitimních selhání.
Migrační strategie: z ad-hoc skriptů k DevOps platformě
- Inventarizace buildů, skriptů a prostředí; mapování tajemství a přístupů.
- Pilotní repozitář s čistým CI a Terraform modulem; definice standardů (lint, test, skenování).
- Šablony (.gitlab-ci.yml / Jenkins Shared Libraries / Terraform moduly) publikujte jako produkt pro týmy.
- Postupný onboarding aplikací, měření DORA metrik a nákladů, vyhodnocení.
Best practices v kostce
- Pipeline as Code a Infrastructure as Code všude; vše verzujte, recenzujte a auditujte.
- Ephemerální exekuce jobů a reprodukovatelná prostředí (pinované image, lockfile závislostí).
- Bezpečnost: OIDC federace CI → cloud, minimální role, trezor tajemství, zásady jako kód.
- Měřit a zlepšovat: DORA, p95 doby buildů, míra flakiness, MTTR; automatizované reporty do týmových dashboardů.
- Modularita: Terraform moduly, sdílené kroky pipeline, opakovatelné šablony pro projekty.
Závěr
Kombinace Jenkins/GitLab CI a Terraform umožňuje vybudovat robustní, bezpečný a škálovatelný DevOps řetězec. Jenkins se hodí pro vysoce přizpůsobené scénáře a heterogenní integrace, GitLab CI exceluje v jednoduchosti a integraci s verzováním a code review, Terraform přináší deterministickou správu infrastruktury. Klíčem k úspěchu je disciplína v návrhu pipeline, bezpečnosti a správě stavu, důsledné měření a standardizace formou šablon a modulů.