Proč integrovat správu konfigurací do CI/CD pipeline
Automatizovaná správa konfigurací (Ansible, Puppet, Chef) zajišťuje idempotentní nasazování systémových stavů, balíčků, služeb a aplikačních nastavení. CI/CD pipeline přináší disciplínu verzování, testování a řízených releasů. Jejich propojením získáte infrastrukturu jako kód se sledovatelnou historií, rychlejší a bezpečnější releasy, konzistentní prostředí napříč vývojem, testováním a produkcí a detekci driftu (odchylky skutečného stavu od deklarovaného).
Referenční architektura: repo, pipeline, orchestrátor
- Monorepo vs. polyrepo: buď jedno repo s aplikací, infrastrukturou a konfiguracemi (zjednodušuje transakční změny), nebo oddělená repozitáře (jasnější vlastnictví a životní cyklus).
- Branching: trunk-based přístup s krátkými feature branchi a povinným code review; release větve pro stabilizaci.
- Registry artefaktů: container registry, úložiště artefaktů pro úlohy CM (role, moduly, cookbooks) a kompilované katalogy (Puppet) nebo sbalené kolekce (Ansible Collections).
- Orchestrátor: GitLab CI/CD, GitHub Actions, Jenkins, Azure Pipelines. Pipeline volá Ansible/Puppet/Chef a publikuje reporty.
Model řízení: GitOps pro konfigurace
Git je jediným zdrojem pravdy. Změna konfigurace vzniká jako PR/MR, prochází testy a po sloučení se automaticky promítá do prostředí. Model pull (Puppet agent, Chef client, Ansible Pull/AWX schedules) stahuje schválené stavy. Model push (Ansible ad-hoc/playbooky) se používá pro řízené rollouty a jednorázové zásahy.
Kroky pipeline pro Ansible, Puppet a Chef
- Lint: ansible-lint, yamllint; puppet-lint; cookstyle/rubocop pro Chef.
- Statická analýza a závislosti: ansible-galaxy (requirements), PDK (Puppet Development Kit), Berkshelf/Policyfiles (Chef).
- Jednotkové testy: rspec-puppet; ChefSpec; validace šablon Jinja/ERB.
- Integrační testy: Molecule (Ansible) s drivery (Docker/Podman/Vagrant); Test Kitchen (Chef); Beaker (Puppet).
- Compliance a bezpečnost: profily InSpec, OpenSCAP, kontrola benchmarků CIS.
- Sestavte a verzujte artefakty: tarbally Collections/roles, moduly Puppet, cookbooks Chef; přidejte tagy semver.
- Podpora mezi prostředími: z dev → test → prod prostřednictvím schválení (ruční úloha / ochrana prostředí).
Idempotence, konvergence a detekce driftu
Nástroj pro správu konfigurací musí zaručit, že opakované spuštění nevyvolá nežádoucí změny. Protokoly o změnách (changed/ok/failed/skipped) se ukládají do artefaktů CI. Nástroje s agenty (Puppet, Chef) navíc pravidelně detekují drift. U modelu push (Ansible) je vhodné integrovat audity – pravidelné běhy v „check mode“ a porovnávání stavu.
Struktura repozitáře a modulární návrh
- Ansible: kolekce/role; oddělené group_vars/host_vars; inventory pro prostředí; playbooks jako tenká orchestrace volající role.
- Puppet: control repo (environments), moduly; Hiera pro data; r10k/Code Manager pro nasazení na Puppet server.
- Chef: cookbooks, policyfiles, wrapper cookbooks; Data Bags/Encrypted Data Bags (nebo Vault).
Správa tajných údajů a citlivých dat
Nikdy neukládejte hesla do repozitáře. Integrujte správce tajemství (HashiCorp Vault, cloud KMS/Secrets Manager, SOPS s KMS/GPG). CI runner má politiku read-only a tokeny vydávané just-in-time. V šablonách používejte funkce lookup (Ansible lookup('community.hashi_vault'), backendy Hiera, Chef Vault).
Prostředí, inventory a cílení
- Oddělujte data (Hiera, group_vars) od logiky (role/module/cookbook).
- Dynamické inventory (cloud, CMDB, Kubernetes): generuje cílové uzly podle tagů a štítků.
- Podpora mezi prostředími: stejné role/cookbooks s různými daty a schématy nasazení.
Vzorová CI/CD pipeline pro Ansible
Následující kostra ilustruje běžné kroky:
# .gitlab-ci.yml (výňatek) stages: [lint, test, build, deploy]
lint:
image: python:3.12
script:
- pip install ansible ansible-lint yamllint
- yamllint .
- ansible-lint
molecule_test:
image: quay.io/ansible/molecule
script:
- pip install molecule-plugins[docker]
- molecule test
build_collection:
image: python:3.12
script:
- ansible-galaxy collection build
- ansible-galaxy collection publish ./namespace-collection-.tar.gz --api-key "$ANSIBLE_GALAXY_TOKEN"
artifacts:
paths: [namespace-collection-.tar.gz]
deploy_dev:
stage: deploy
image: registry.example.com/ansible-awx-cli:latest
when: manual
script:
- awx --conf.host "$AWX_URL" --conf.token "$AWX_TOKEN" job_templates launch "Site Deploy" --extra-vars environment=dev
environment: name: dev
deploy_prod:
stage: deploy
when: manual
needs: ["deploy_dev"]
script: ["./scripts/ansible_approve_and_deploy.sh prod"]
environment: name: production
Vzorová pipeline pro control repo Puppet
# GitHub Actions (výňatek) name: puppet-control on: [push, pull_request] jobs: lint-test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: puppetlabs/action-pdk@main with: targets: "modules/**" - name: rspec run: bundle exec rake spec build-deploy: if: startsWith(github.ref, 'refs/tags/') runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: r10k deploy run: r10k deploy environment -p env: PUPPETFILE: Puppetfile R10K_SSH_KEY: ${{ secrets.R10K_SSH_KEY }}
Vzorový krok pipeline pro Chef s Policyfiles
# Jenkinsfile (výňatek) pipeline { agent any stages { stage('Lint & Unit') { steps { sh 'chef exec cookstyle' sh 'chef exec rspec' } } stage('Integration') { steps { sh 'chef exec kitchen test' } } stage('Build Policy') { steps { sh 'chef exec chef install' sh 'chef exec chef export . ./export --force' archiveArtifacts artifacts: 'export/**' } } stage('Promote') { when { branch 'main' } steps { sh 'chef exec chef push prod ./export/policies/*.lock.json' } } } }
Strategie rolloutů: canary, blue/green, dávkování
- Canary: nasaďte role/cookbook pouze na malý procentní vzorek uzlů, monitorujte jej a poté rozsah rozšiřujte.
- Blue/Green: připravte paralelní prostředí a přepněte směrování (LB/DNS); rollback znamená návrat.
- Dávkování: dávkujte n hostitelů současně (Ansible serial, Puppet orchestrátor, Chef rolling).
Testy a validace: od syntaktické po provozní
- Syntaktická: syntaxe YAML/ERB/Ruby; linting.
- Jednotkové: rspec-puppet, ChefSpec – ověřují katalog prostředků.
- Integrační: Molecule/Test Kitchen/Beaker – ověření stavu virtuálního počítače/kontejneru.
- Compliance: InSpec – kontrola portů, služeb, oprávnění a šifer.
- Provozní: smoke testy po nasazení (HTTP 200, metriky, logy).
Observabilita a audit
Protokoly běhů nástrojů CM odesílejte do centralizované správy logů (ELK/Opensearch, Loki). Publikujte metriky: počet změn, chyb, průměrná doba trvání, počet případů driftu. CI ukládá reporty jako artefakty; dashboard zobrazuje stav prostředí, verze rolí/cookbooks a poslední úspěšný běh.
Bezpečnostní vzory pro CI/CD a CM
- Princip nejnižších oprávnění: CI runnery s omezeným rozsahem oprávnění; oddělené identity pro jednotlivá prostředí.
- Podpisy a provenience: podepisujte balíčky (GPG), využijte SBOM pro role/cookbooks a ověřujte úroveň SLSA sestavení.
- Kontrola šablon: ověřujte vkládání (escaping), používejte rozumné výchozí hodnoty a explicitní typy proměnných.
- Schvalování změn: povinné code review a policy-as-code (Open Policy Agent, Conftest) v PR/MR.
Policy as Code a kontrolní brány
Definujte zásady (např. zákaz otevřeného SSH, povinný auditd) jako strojově vyhodnotitelné politiky. V pipeline přidejte krok, který ověřuje manifesty/role/cookbooks podle těchto pravidel. Změny, které pravidlům nevyhovují, nepropustí dál.
Kubernetes a aplikační konfigurace
Pro aplikační konfigurace v K8s kombinujte nástroje CM pro uzly (OS, agenti, runtime) s operátory GitOps (Argo CD/Flux) pro workloady. Secrety spravujte pomocí External Secrets/Sealed Secrets. Udržujte zdroj pravdy mimo cluster (Git + Vault) a propojte validace (OPA Gatekeeper/Kyverno).
Windows a hybridní prostředí
Ansible (moduly win_*), Puppet (prostředky Windows) a Chef (cookbooks pro Windows) podporují správu Windows. Pipeline musí mít runner s Windows executorem a integrační testy v prostředí Hyper-V nebo AWS/GCP. Pro AD/GPO integrujte ověřování a pečlivě izolujte oprávnění v doméně.
Výkon a škálování
- Paralelizace: Ansible forks, Puppet orchestrator, Chef push jobs. U sdílených backendů (DB, registry) postupujte opatrně a dodržujte limity.
- Cache: cache pip/apt/yum, cache Galaxy/Forge/Community; zrcadlete repozitáře do lokální sítě.
- Opakovaně použitelné pipeline: šablony, composite actions, sdílené knihovny v Jenkinsu.
Migrační strategie a kompatibilita
Při přechodu mezi verzemi nástrojů nebo operačních systémů zachovejte období dual-run: stejné hostitele spravuje nová i stará verze v režimu „noop/check“, porovnávají se rozdíly a teprve potom se přechází na novou verzi. O sémantickém verzování a plánech ukončení podpory informujte s předstihem.
Nejčastější antipatterny
- Imperativní skripty v nástrojích CM: shell skripty bez idempotence; místo nich používejte nativní typy prostředků.
- Konfigurační data v kódu: směšování hodnot a logiky; data patří do Hiera/group_vars/Policyfiles.
- Jednorázové manuální zásahy: vedou k driftu; každou urgentní opravu zaznamenejte jako PR/MR.
- Servery „snowflake“: jedinečné ruční konfigurace; standardizujte role a profily.
Měřitelnost a KPI
- MTTR: doba návratu do cílového stavu po poruše.
- Change failure rate: podíl releasů, po kterých je nutný rollback.
- Lead time for changes: doba od PR po nasazení.
- Index driftu: počet uzlů, které neodpovídají deklarovanému stavu.
Kontrolní seznam pro nasazení do produkce
- Repozitář má jasnou strukturu (role/moduly/cookbooks, data oddělená v Hiera/group_vars/Policyfiles).
- Pipeline obsahuje lint, unit, integrační a compliance testy a také policy-as-code.
- Secrety spravuje secret manager, runner má minimální oprávnění.
- Artefakty jsou verzované a podepsané, existuje postup jejich propagace mezi prostředími.
- Existuje strategie rolloutů (canary/batch) a automatický rollback na základě metrik.
- Observabilita: centralizované logy, metriky a reporty z agentů.
- Existují runbooky pro incidenty a zdokumentované postupy rollbacku.
Závěr
Integrace správy konfigurací s CI/CD není jen technický upgrade, ale změna provozního modelu. Přináší auditovatelnost, bezpečnost a rychlost – za cenu disciplíny v kódu, testování a správě dat. Začněte u malé služby, standardizujte vzory (role/profily/policy), budujte pipeline s důrazem na kvalitu a postupně ji rozšiřujte na celý ekosystém.
