# 🔄 CI/CD a DevOps ## CI/CD Pipeline ``` Code Commit → Build → Test → Package → Deploy to Staging → Integration Tests → Deploy to Production ``` ### Detailní pipeline stages ``` 1. Checkout ──→ 2. Lint ──→ 3. Test ──→ 4. Build ──→ 5. Scan ──→ 6. Publish ──→ 7. Deploy │ │ │ ESLint/ Unit/Integ/ SAST/SCA/ Prettier e2e tests Container scan ``` | Stage | Nástroje | Co se děje | |-------|----------|------------| | **Checkout** | git clone, fetch | Stažení kódu z repozitáře, včetně submodulů | | **Lint** | ESLint, Prettier, RuboCop, golangci-lint | Statická analýza kódu, formátování | | **Test (unit)** | Jest, pytest, JUnit | Rychlé testy (ms až s), bez závislostí | | **Test (integration)** | Testcontainers, Docker Compose | Testy s DB, message queue, externí služby | | **Test (e2e)** | Playwright, Cypress, Selenium | Full-stack testy v prohlížeči | | **Build** | Docker build, go build, npm build, Maven | Kompilace, sestavení artifactu | | **Scan (SAST)** | Semgrep, SonarQube, CodeQL | Statická analýza bezpečnosti | | **Scan (DAST)** | OWASP ZAP, Burp Suite | Dynamická analýza (běžící aplikace) | | **Scan (SCA)** | Dependabot, Snyk, Trivy | Analýza závislostí a CVE | | **Publish** | Docker push, npm publish, Maven deploy | Nahrání artifactu do registru | | **Deploy** | ArgoCD, Terraform, Helm, kubectl | Nasazení do cílového prostředí | ### Continuous Integration (CI) - Automatické sestavení a testy při každém commitu - Rychlá feedback smyčka (< 10 min) - Linting, type checking, unit testy, security scan (SAST) ### Continuous Delivery (CD) - Automatické deploye do staging / test prostředí - Ruční schválení do produkce (optional) - Smoke testy po deployi ### Continuous Deployment - Plně automatický deploy do produkce - Vyžaduje vysokou důvěru v testy a monitoring - Feature flagy pro řízení rizika ## GitHub Actions detail ### Workflow syntax ```yaml name: CI Pipeline on: push: branches: [main] pull_request: branches: [main] env: NODE_VERSION: "22" jobs: lint: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: ${{ env.NODE_VERSION }} - run: npm ci - run: npm run lint test: runs-on: ubuntu-latest needs: lint strategy: matrix: node-version: [22, 24] steps: - uses: actions/checkout@v4 - name: Run tests run: npm test ``` ### Matrix builds - Spouští stejné joby s různými parametry (OS, jazyková verze, architektura) - `strategy.matrix` — kombinace parametrů (kartézský součin) - `strategy.fail-fast` — zastavení všech při selhání jednoho ### Reusable workflows ```yaml # .github/workflows/deploy.yml (called) on: workflow_call: inputs: environment: required: true type: string secrets: cloud_role: required: true # Volání v caller workflow jobs: deploy: uses: ./.github/workflows/deploy.yml with: environment: staging secrets: cloud_role: ${{ secrets.STAGING_ROLE }} ``` ### Composite actions - Vlastní akce bez nutnosti samostatného repozitáře - Kombinace `run`, `uses`, `shell` kroků - Use case: standardizace lint/test/build napříč repozitáři ### Self-hosted runners - Vlastní infrastruktura pro běh GitHub Actions - Use case: privátní síť, GPU, specifický HW, compliance - Škálování: actions-runner-controller (Kubernetes), auto-scaling groups - Bezpečnost: izolace jobů, ephemeral runners ## GitLab CI detail ```yaml stages: - lint - test - build - deploy variables: DOCKER_IMAGE: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA lint: stage: lint image: node:22 script: - npm ci - npm run lint test: stage: test image: node:22 needs: ["lint"] script: - npm test artifacts: paths: - coverage/ reports: coverage_report: coverage_format: cobertura path: coverage/cobertura-coverage.xml deploy-staging: stage: deploy needs: ["build"] rules: - if: $CI_COMMIT_BRANCH == "main" environment: name: staging url: https://staging.example.com script: - kubectl set image deployment/app app=$DOCKER_IMAGE ``` **Koncepty**: - **Stages** — sekvenční fáze (každá stage může mít více jobů paralelně) - **Rules** — podmínky spuštění (branch, tag, changes, variables) — nahrazuje `only/except` - **Needs** — DAG závislosti (job nemusí čekat na celou stage) - **Artifacts** — předávání souborů mezi joby (binárky, reporty, cache) - **Environments** — sledování deployů (rollback, history, approvals) ### DAG pipelines (needs) ``` lint ──→ test ──→ build ──→ deploy-staging ──→ deploy-prod ↓ build-arm ──→ test-arm ``` - Definuje závislosti mezi joby (ne nutně stages) - Umožňuje paralelizaci nezávislých jobů - Snižuje celkový čas pipeline ## Infrastructure as Code (IaC) | Nástroj | Typ | Jazyk | |---------|-----|-------| | Terraform | Declarative | HCL | | OpenTofu | Declarative | HCL (fork Terraformu) | | Pulumi | Declarative | TypeScript, Python, Go, C# | | AWS CDK | Declarative | TypeScript, Python, Java, C# | | CloudFormation | Declarative | YAML/JSON (AWS) | | Azure ARM/Bicep | Declarative | Bicep, JSON | | Ansible | Imperative/Config | YAML | | Chef/Puppet | Config mgmt | Ruby DSL | ### Infrastructure as Code (2. vydání) — Kief Morris Klíčová reference pro navrhování a provozování dynamické cloudové infrastruktury pomocí IaC. Kniha je tool-agnostic — zaměřuje se na vzory a postupy, ne na konkrétní nástroje. #### Tři základní praktiky | Praktika | Popis | |----------|-------| | **Define everything as code** | Veškerá infrastruktura definovaná v kódu, version control, repeatabilita | | **Continuously test and deliver** | Každá změna prochází pipeline s automatickými testy | | **Small, independent pieces** | Malé, volně provázané komponenty — snadnější změna a testování | #### Principy cloudové infrastruktury - **Systems reproducible** — infrastructure can be recreated from code at any time - **Systems disposable** — instance mohou být zničeny a znovu vytvořeny - **Systems consistent** — všechny prostředí identická (žádné snowflake servery) - **Processes repeatable** — automatizace namísto manuálních postupů - **Design always changing** — infrastruktura se neustále vyvíjí (není build-and-forget) #### Anti-vzory (pitfalls) | Anti-vzor | Popis | |-----------|-------| | **Snowflake server** | Každý server jiný, nelze reprodukovat | | **Configuration drift** | Ruční změny → odchylky od definovaného stavu | | **Server sprawl** | Příliš mnoho serverů bez správy | | **Fragile infrastructure** | Křehká infrastruktura — změny často rozbijí systém | | **Automation fear** | Strach z automatizace → ruční zásahy | #### Struktura knihy (4 části) 1. **Foundations** — rámec nástrojů a technologií pro cloud platformy 2. **Working with infrastructure stacks** — definice, provisionování, testování a CD změn infrastruktury 3. **Working with servers and application runtime platforms** — provisionování a konfigurace serverů a clusterů 4. **Working with large systems and teams** — workflow, governance, architektonické vzory pro více týmů #### Organizace IaC kódu | Vzor | Popis | |------|-------| | **Monorepo** | Jeden repozitář pro vše — build-time integrace, vhodný pro malé týmy | | **Microrepo** | Samostatný repozitář pro každý projekt — izolace, vhodný pro velké týmy | | **Domain organization** | Organizace kódu podle doménových konceptů (ne podle technologií) | **Doporučení:** - Infrastruktura a aplikace mohou být ve stejném nebo odděleném repozitáři záleží na organizační struktuře (Team Topologies) - Konfigurační soubory per-environment (test, staging, production) ukládat v rámci projektu - Testy patří k projektu, integrační testy mohou být v samostatném projektu - Infrastrukturní kód by neměl přímo deployovat aplikace — použít OS packaging (RPM, deb) #### Expand-Contract pattern pro změny infrastruktury Stejný princip jako u databázových migrací: 1. **Expand** — přidat nový resource (nestará verze stále běží) 2. **Migrate** — přesunout traffic / závislosti na nový resource 3. **Contract** — odstranit starý resource Zabraňuje výpadkům při refaktorování infrastruktury. ## Terraform detail #### State locking mechanism | Backend | Locking mechanism | Poznámka | |---------|------------------|----------| | **S3 + DynamoDB** | DynamoDB (ConditionalPut) | Nejčastější, levný, jednoduchý | | **Terraform Cloud** | Built-in (API) | SaaS, audit logy, VCS integration | | **Azure Storage** | Azure Blob Lease | Podobný S3 modelu | | **GCS** | Cloud Storage Object Hold | Omezené | | **Consul** | Consul KV session_lock | High-availability | | **PostgreSQL** | pg_advisory_lock / row lock | Vlastní backend | #### State backends comparison | Vlastnost | S3 + DynamoDB | Terraform Cloud | Consul | |-----------|--------------|----------------|--------| | Cena | $ (S3 + DynamoDB) | $$ (free tier omezený) | $$ (infra) | | Team workflow | GitHub Actions + OIDC | Native RBAC, runs | Vlastní | | Locking | DynamoDB | Built-in | Consul session | | History | S3 versioning | Full history, diff | None | | Remote ops | Ne (pouze state) | Ano (remote runs) | Ne | | Encryption | SSE-S3/KMS | At rest + in transit | TLS | #### Workspaces vs Terragrunt | Aspekt | Terraform Workspaces | Terragrunt | |--------|---------------------|------------| | **Separace stavu** | Jeden backend, klíč: `env:/workspace` | Samostatný backend per env | | **Code reuse** | Stejný kód, jiné proměnné | DRY konfigurace, moduly | | **Riziko** | Omylem `apply` do špatného workspace | Izolované backends | | **Kdy použít** | Jednoduché projekty, <5 env | Mikroservice, multi-env, multi-team | | **Extra features** | — | Dependency, include, before_hook | #### Provider versioning ```hcl terraform { required_version = ">= 1.5, < 2.0" required_providers { aws = { source = "hashicorp/aws" version = "~> 5.0" } kubernetes = { source = "hashicorp/kubernetes" version = ">= 2.23" } } } ``` - `~> 5.0` — pouze patch verze (5.x, x ≥ 0) - `>= 2.23, < 3.0` — jakákoli 2.x od 2.23 - `~>` constraints zabraňují breaking changes v major/minor ### Terraform workflow ``` terraform init → Stáhne provider moduly terraform plan → Zobrazí změny terraform apply → Aplikuje změny terraform destroy → Zničí infrastrukturu terraform validate → Validace syntaxe terraform fmt → Formátování HCL ``` ### State management - Remote state (S3, Terraform Cloud, Azure Storage) - State locking (DynamoDB, Consul) - Workspaces pro oddělení prostředí ### Terraform: Up and Running (3rd ed.) — Yevgeniy Brikman Praktický průvodce Terraformem od zakladatele Gruntwork. 3. vydání (2022) přidává přes 100 stran nového obsahu, aktualizaci z Terraform 0.12 na 1.2 a dvě nové kapitoly. #### Co je nového ve 3. vydání | Novinka | Popis | |---------|-------| | **Kapitola: Secrets management** | Správa tajemství s Terraformem — Vault, AWS Secrets Manager, KMS, OIDC, `sensitive` proměnné | | **Kapitola: Multiple providers** | Práce s vícero regiony, účty, cloudy včetně Kubernetes (AWS EKS) | | **Terraform 1.0+** | Backward compatibility promise, stabilita, HashiCorp IPO | | **Provider versioning** | `required_providers` blok + `terraform.lock.hcl` (lock file) | | **Module iteration** | `count` a `for_each` na modulech (od Terraform 0.13) | | **Variable validation** | `validation {}` bloky, `precondition` / `postcondition` | | **Refactoring** | `moved` bloky — bezpečný refactoring bez ruční manipulace se state | | **CI/CD security** | OIDC autentizace, isolated workers pro `terraform apply` | #### Secrets management s Terraformem ```hcl # Proměnná označená jako sensitive — nikdy se nezobrazí v logu variable "db_password" { type = string sensitive = true } # Čtení secrets z AWS Secrets Manager data "aws_secretsmanager_secret" "db" { name = "production/db/master" } data "aws_secretsmanager_secret_version" "db" { secret_id = data.aws_secretsmanager_secret.db.id } ``` **Doporučená hierarchie bezpečnosti:** 1. **OIDC** — nejbezpečnější, bez creds na CI serveru (GitHub Actions → IAM role) 2. **IAM role** — instance profile (EC2, ECS, EKS) 3. **Environment variables** — omezené, riziko úniku v logu 4. **Isolated workers** — oddělený worker s admin permissions, API pouze `plan`/`apply` #### Testing Terraform kódu | Vrstva | Nástroje | Popis | |--------|----------|-------| | **Static analysis** | `terraform validate`, `tflint`, `tfsec`, `checkov` | Analýza kódu bez běhu | | **Plan testing** | `conftest` + OPA (Rego), `terraform plan` parse | Validace plánu proti policy | | **Unit tests** | Terratest (Go), `terraform fmt`, `terraform validate` | Testování modulů izolovaně | | **Integration tests** | Terratest (Go) | Skutečné provisionování + assert | | **End-to-end tests** | Terratest | Plný stack, smoke testy | #### Policy enforcement ```rego # OPA / conftest — zakázat veřejné S3 bucket package main deny[msg] { resource := input.resource_changes[_] resource.type == "aws_s3_bucket" resource.change.after.acl == "public-read" msg = sprintf("%s must not be public", [resource.address]) } ``` #### Production-grade checklist dle Brikmana 1. **Small modules** — jeden modul = jedna věc (single responsibility) 2. **Composable modules** — moduly se dají skládat do větších celků 3. **Testable modules** — každý modul má testy (Terratest) 4. **Releasable modules** — verzování (Git tagy, Terraform Registry) 5. **Version control** — všechno v gitu, včetně `.terraform.lock.hcl` 6. **Remote state** — S3 + DynamoDB nebo Terraform Cloud 7. **CI/CD pipeline** — `plan` na MR, `apply` po merge do main 8. **Secrets management** — žádné secrets v plaintextu v kódu 9. **Policy as code** — OPA / Sentinel pro compliance 10. **Sandbox prostředí** — každý vývojář má vlastní izolované prostředí #### Zlaté pravidlo (Golden Rule of Terraform) > **Master branch state musí být vždy v souladu s produkčním prostředím.** > Nikdy nespouštět `terraform apply` ručně lokálně na produkci — vždy přes CI/CD. ## Dockerfile best practices ```dockerfile # Multi-stage build FROM node:22-alpine AS builder WORKDIR /app COPY package*.json ./ RUN npm ci --only=production COPY . . RUN npm run build # Runtime stage — distroless FROM gcr.io/distroless/nodejs22-debian12 WORKDIR /app COPY --from=builder /app/dist ./dist COPY --from=builder /app/node_modules ./node_modules USER nonroot:nonroot EXPOSE 3000 CMD ["dist/server.js"] ``` **Pravidla**: - **Multi-stage build** — oddělení build tools od runtime - **Distroless images** — minimal attack surface (žádný shell, package manager) - **Non-root user** — USER nonroot (security best practice) - **Layer caching** — nejdříve kopírovat málo se měnící soubory (package.json → npm ci → code) - **Small base image** — Alpine (5 MB), distroless (minimální), scratch (Go static binary) - **Healthcheck** — HEALTHCHECK instrukce pro orchestrátor - **Labels** — LABEL maintainer, version, git commit - **.dockerignore** — minimalizace build contextu ## Artifact management ### Docker registries | Registry | Public/Private | Cena | Integrace | |----------|---------------|------|-----------| | **Docker Hub** | Obojí | Public free, private $5/měsíc | GitHub Actions, GitLab | | **ECR (AWS)** | Private | $0.10/GB/měsíc + data transfer | IAM, ECS, EKS | | **GHCR (GitHub)** | Obojí | Public free, private 500 MB free | GitHub Actions, npm | | **GCR / Artifact Registry** | Private | $0.10/GB/měsíc | GKE, Cloud Build | | **ACR (Azure)** | Private | $0.11/GB/měsíc | AKS, Azure DevOps | | **Harbor** | Private (self-hosted) | Zdarma (open source) | Vlastní, CNCF | ### Helm charts - **Repository** — index.yaml + chart .tgz na HTTP serveru (S3, GitHub Pages, ChartMuseum) - **OCI registry** — Helm 3.8+ podporuje uložení chartů v OCI registrech (ECR, GHCR, Harbor) - **Versioning** — chart version (balíček) + app version (aplikace) ### SBOM (Software Bill of Materials) - **SPDX** / **CycloneDX** — standardní formáty SBOM - Generování: Trivy, Syft, grype - Use case: supply chain security, compliance (EO 14028, EU CRA) ## Konfigurace a tajemství | Nástroj | Popis | |---------|-------| | Vault (HashiCorp) | Dynamic secrets, encryption-as-a-service | | AWS Secrets Manager | Managed, auto-rotation | | Azure Key Vault | Managed, HSM podpora | | GCP Secret Manager | Managed | | SOPS | Encryption v git repos | | Sealed Secrets | Encrypted secrets pro Kubernetes | ### Secret management workflows **Vault agent injector** (Kubernetes) - Sidecar container (vault-agent) injectuje secrets do podu - Secrets mountovány jako tmpfs volume (ne do environment variables) - Auto-rotation: vault-agent periodicky refreshuje secrets **External Secrets Operator** (Kubernetes) - CRD: `ExternalSecret` → vytváří `Secret` v K8s - Backend: AWS Secrets Manager, Azure Key Vault, GCP Secret Manager, Vault - Push-based refresh: změna v externím store → propagate do K8s **Sealed Secrets** - `kubeseal` zašifruje Secret na clusteru (controller má privátní klíč) - Zašifrovaný manifest (SealedSecret) může být bezpečně v gitu - Controller decryptuje při deployi ## GitOps - **Princip**: Git je jediný zdroj pravdy (single source of truth) - **Nástroje**: ArgoCD, Flux, Rancher Fleet - Pull-based deploy — agent v clusteru sleduje repo a aplikuje změny - Auto-sync + drift detection ## Environment promotion (dev → staging → prod) ``` Code → Dev (auto-deploy) → Staging (auto + smoke tests) → Prod (manual approval + gating) ``` **Quality gates**: 1. **Unit tests** — pass rate 100 %, code coverage ≥ 80 % 2. **Integration tests** — all critical paths pass 3. **SAST scan** — no critical/high vulnerabilities 4. **SCA scan** — no known critical CVEs 5. **Container scan** — all fixable vulns addressed 6. **Smoke tests** — po deployi na staging (health endpoint, basic flow) 7. **Manual approval** — pro produkci (volitelné při CD) ## Deployment strategie | Strategie | Popis | Riziko | |-----------|-------|--------| | **Rolling update** | Postupná výměna instancí | Nízké | | **Blue/Green** | Dvě identická prostředí, přepojení trafficu | Střední | | **Canary** | % trafficu na novou verzi, postupné zvyšování | Nízké | | **Feature flag** | Zapnutí/vypnutí funkce bez deploye | Velmi nízké | | **A/B testing** | Různé verze pro různé uživatele | Nízké | ## Git branching strategies | Strategie | Popis | Vhodné pro | |-----------|-------|-----------| | **Trunk-based** | Jeden hlavní branch (main), krátké feature branche (< 1 den) | CD, microservices, mature teams | | **GitHub Flow** | Main + feature branche, PRs, jednoduchý | Startupy, web apps | | **GitLab Flow** | Main + environment branche (staging, prod) + feature branche | Enterprise, regulated | | **GitFlow** | Develop + main + feature/release/hotfix branche | Release-based, enterprise legacy | | **One Flow** | Zjednodušený GitFlow (bez develop branche) | Střední týmy | ## Rollback strategies | Strategie | Popis | Rychlost | Riziko | |-----------|-------|----------|--------| | **Forward fix** | Nový deploy s hotfixem | Pomalá (build + deploy) | Nízké | | **Rollback (revert commit)** | Revert gitu, nový deploy | Střední | Nízké | | **Blue/Green switchback** | Přepojení zpět na starou verzi | Okamžitá | DB inkompatibilita | | **Database rollback** | Reverze DB migrace (migrate down) | Pomalá | Data loss risk | ### Database rollback challenges - **Breaking changes** — odstranění sloupce/tabulky znamená rollback problém (data ztracena) - **Best practice**: Expand → Migrate → Contract (nikdy neodstraňovat v jednom deployi) - **Tooling**: Flyway undo (limited), Liquibase rollback, pgroll (Postgres) - **Feature flagy** jako prevence — nový kód je za flagem, rollback = vypnutí flagu ## CI/CD Design Patterns Moderní CI/CD pipeline řeší opakující se problémy pomocí návrhových vzorů: | Vzor | Popis | |------|-------| | **Pipeline as Code** | Pipeline definovaná v YAML/Kotlin DSL (`.gitlab-ci.yml`, `.github/workflows/`) | | **Immutable Pipeline** | Každý build je artifact, nikdy se nemění | | **Quality Gate** | Branch protection, required checks, code coverage threshold | | **Deployment Strategy** | Blue/Green, Canary, Rolling (viz tabulka níže) | | **GitOps** | Pull-based deploy s auto-sync a drift detection | | **Shift-Left Security** | SAST/DAST/SCA součást pipeline | | **Dependency Caching** | Cache layer mezi běhy pipeline | ## Shift left security ### SCA (Software Composition Analysis) | Nástroj | Typ | Integrace | |---------|-----|-----------| | **Dependabot** | GitHub native | GitHub, auto-PR na fix | | **Renovate** | Multi-platform | GitHub, GitLab, Bitbucket | | **Snyk** | SaaS + CLI | Všechny platformy, Docker, IaC | | **Trivy** | CLI, OSS | CI/CD pipeline (GitHub Actions, GitLab) | ### SAST (Static Application Security Testing) | Nástroj | Jazyky | Charakteristika | |---------|--------|----------------| | **Semgrep** | 30+ (Python, Java, Go, JS/TS) | Rychlý, custom rules, CI-native | | **SonarQube** | 30+ | Komplexní, quality gates, tech debt | | **CodeQL** | 12 (C++, C#, Go, Java, JS/TS, Python) | GitHub native, query-based | | **Checkmarx** | 30+ | Enterprise, CxSAST, CxFlow | | **Fortify** | 30+ | Enterprise, SAST + DAST | ### Container scanning | Nástroj | Popis | |---------|-------| | **Trivy** | OSS, skenuje OS packages + language-specific + IaC | | **Grype** | OSS, od Anchore, rychlý, Syft pro SBOM | | **Clair** | Red Hat, OSS, OCI-compatible | | **Docker Scout** | Docker Desktop / CLI, integrace s Docker Hub | ## AI-Native Software Delivery (2025–2026) AI transformuje DevOps 2.0: - **AI-assisted CI/CD** — automatické diagnózy selhání pipeline, optimalizace resource alokace - **Agent Control Protocol (ACP)** / **Model Context Protocol (MCP)** — standardy pro interakci AI agentů s toolingem - **AI-driven cost management** — FinOps optimalizace cloudu - **Intelligent test selection** — ML určuje, které testy spustit podle změn v kódu - **Self-healing pipelines** — AI auto-detekuje a opravuje běžné problémy Nové nástroje: Harness (AI-native CD), GitLab 19.0 (agentic MR workflows, secrets manager), Octopus Deploy. ## Nástroje pro pipeline - **GitHub Actions** — integrovaný s GitHubem, velký marketplace - **GitLab CI** — nativní v GitLabu, auto DevOps - **Jenkins** — nejstarší, extensible, self-hosted - **CircleCI** — SaaS, rychlý - **Argo Workflows** — Kubernetes nativní - **Buildkite** — hybrid (vlastní agenti, SaaS orchestrator) ## Best practices - **Idempotentní pipeline** — opakované spuštění dává stejný výsledek - **Immutable infrastructure** — nikdy neupravovat running server, vždy znovu nasadit - **Shift left** — testy a security co nejdříve v pipeline - **Artifact management** — všechny buildy verzované v registru (Docker Hub, ECR, GHCR) - **Dependency caching** — urychlení pipeline (npm ci, pip cache, Docker layer caching) - **Fail fast** — pipeline selže co nejdříve při chybě ## Zdroje Odkazy, knihy a standardy: [sources/cicd/sources.md](sources/cicd/sources.md) ### Doporučená literatura | Kniha | Autoři | ISBN | Klíčový přínos | |-------|--------|------|----------------| | The DevOps Handbook | Kim, Humble, Debois, Willis | 978-1942788003 | Principy CALMS (Culture, Automation, Lean, Measurement, Sharing), flow mapa, deployment pipeline | | Continuous Delivery | Humble, Farley | 978-0321601912 | Deployment pipeline, commit stage, acceptance tests, capacity testing, zero-downtime release | | CI/CD Design Patterns | Bajpai, Schildmeijer, Piwosz, Mishra | 978-1-83588-965-7 | 30+ návrhových vzorů pro CI/CD — pipeline patterns, GitOps, security, testing, deployment strategie | | DevOps Frameworks, Techniques, and Tools | Vijayakumaran, Kofler, Öggl, Springer | 978-1-4932-2670-2 | Rámec pro adopci DevOps, srovnání nástrojů (Jenkins vs GitLab vs GitHub Actions), techniky pro monitoring a observabilitu | - **Quality gates** — automated checks před každým povýšením do dalšího prostředí - **Pipeline visibility** — dashboard s aktuálním stavem všech pipeline (GitHub, GitLab, ArgoCD) ## OpenStack CI/CD OpenStack ekosystém používá vlastní CI/CD nástroje: ### Zuul - CI/CD systém vyvinutý OpenStack komunitou (nyní samostatný, používaný i mimo OpenStack) - **Gating** — změny se testují před merge (ne po merge) — zabraňuje rozbití main branche - **Ansible-based** — jobs jsou Ansible playbooky - **Nodepool** — dynamická alokace testovacích VM v cloudu (OpenStack, AWS) - **Pipeline** — check, gate, post, periodic, tag, release ### OpenStack Infra (OpenDev) - Veřejná CI infrastruktura pro OpenStack projekty - Nástroje: Gerrit (code review), Zuul (CI), Nodepool (test nodes), Storyboard (issue tracking) - Base jobs: tempest (integration tests), grenade (upgrade tests), devstack-gate (gate tests) ### Integrace s externími nástroji - **Terraform** — OpenStack provider pro provisioning (terraform-provider-openstack) - **Ansible** — openstack.cloud collection pro správu OpenStack zdrojů - **Packer** — build OpenStack images (openstack builder) - **Jenkins** — starší CI, stále používaný v některých distribucích *Poslední revize: 2026-06-03*