Správa konfigurací a CI/CD

Správa konfigurací a CI/CD

Proč integrovat správu konfigurací do CI/CD pipeline

Automatizovaná správa konfigurací (Ansible, Puppet, Chef) řeší idempotentní nasazení systémových stavů, balíčků, služeb a aplikačních nastavení. CI/CD pipeline přináší disciplinu verzování, testování a kontrolovaných releasů. Jejich propojením získáte sledovatelnou infrastrukturu jako kód, rychlejší a bezpečnější releasy, konzistentní prostředí napříč vývoj–test–produkce a detekci driftu (odchylky reálného stavu od deklarovaného).

Referenční architektura: repo, pipeline, orchestrátor

  • Monorepo vs. polyrepo: buď jedno repo s aplikací, infrastrukturou a konfiguracemi (zjednoduší transakční změny), nebo oddělená repozitáře (jasnější vlastnictví a lifecycle).
  • Branching: trunk-based s krátkými feature branch a povinnými code review; release větve pro stabilizaci.
  • Artefaktové registry: container registry, artifact store 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ý zdroj pravdy. Změna konfigurace vzniká jako PR/MR, prochází testy a po merge se automaticky promítá do prostředí. Pull (Puppet agent, Chef client, Ansible Pull/ AWX schedules) stahuje schválené stavy. Push (Ansible ad-hoc/Playbooks) se používá pro řízené rollouty a jednorázové zásahy.

Pipeline kroky pro Ansible, Puppet, Chef

  1. Lint: ansible-lint, yamllint; puppet-lint; cookstyle/rubocop pro Chef.
  2. Statická analýza a závislosti: ansible-galaxy (requirements), PDK (Puppet Development Kit), Berkshelf/Policyfiles (Chef).
  3. Jednotkové testy: rspec-puppet; ChefSpec; validace Jinja/ERB templátů.
  4. Integrační testy: Molecule (Ansible) s driverey (Docker/Podman/Vagrant); Test Kitchen (Chef); Beaker (Puppet).
  5. Compliance & bezpečnost: InSpec profily, OpenSCAP, kontrola CIS benchmarků.
  6. Buildujte a verzujte artefakty: Collections/roles tarbally, Puppet moduly, Chef cookbooks; přidejte semver tagy.
  7. Promote mezi prostředími: z devtestprod přes schválení (manual job / environment protection).

Idempotence, konvergence a detekce driftu

Správce konfigurací musí garantovat, že opakované spuštění nevyvolá nežádoucí změny. Logy změn (changed/ok/failed/skipped) se ukládají do CI artefaktů. Agentní nástroje (Puppet, Chef) navíc periodicky detekují drift. U push modelu (Ansible) je vhodné integrovat audity – pravidelné „check mode“ běhy a porovnání stavu.

Struktura repozitáře a modulární design

  • 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 deploy do Puppet serveru.
  • Chef: cookbooks, policyfiles, wrapper cookbooks; Data Bags/Encrypted Data Bags (nebo Vault).

Správa tajemství a citlivých dat

Nikdy neukládejte hesla v repo. Integrujte secret manager (HashiCorp Vault, cloud KMS/Secrets Manager, SOPS s KMS/GPG). CI runner má read-only politiku a just-in-time tokeny. V templátech používejte lookup funkce (Ansible lookup('community.hashi_vault'), Hiera backendy, 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 dle tagů a labelů.
  • Environment promotion: 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ý control-repo pipeline pro 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ý pipeline krok 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, modré/zelené, dávky

  • Canary: nasadit role/cookbook pouze na malý procentní vzorek uzlů, monitorovat, poté navyšovat.
  • Blue/Green: připravit paralelní prostředí, přepnout směrování (LB/DNS), rollback je návrat.
  • Batching: dávkovat n hostů současně (Ansible serial, Puppet orchestrátor, Chef rolling).

Testy a validace: od syntaktické po provozní

  • Syntaktická: YAML/ERB/Ruby syntax; linting.
  • Jednotkové: rspec-puppet, ChefSpec – validují resource katalog.
  • Integrační: Molecule/Test Kitchen/Beaker – ověření stavu VM/kontejneru.
  • Compliance: InSpec – kontrola portů, služeb, práv, šifer.
  • Provozní: smoke testy po deploy (HTTP 200, metriky, logy).

Observabilita a audit

Logy běhů CM nástroje posílejte do centrálního log managementu (ELK/Opensearch, Loki). Publikujte metriky: počet změn, chyb, průměrné trvání, drift count. CI ukládá reporty jako artefakty; dashboard ukazuje stav prostředí, verze rolí/cookbooks a poslední úspěšný běh.

Bezpečnostní vzory pro CI/CD a CM

  • Princip minimálních práv: CI runnery s omezeným scope; oddělené identity per prostředí.
  • Podpisy a provenance: podepisujte balíčky (GPG), využijte SBOM pro role/cookbooks, ověřujte SLSA úroveň buildů.
  • Kontrola templátů: validujte vstřikování (escaping), rozumné defaulty, explicitní typy proměnných.
  • Schvalování změn: povinné code review a policy-as-code (Open Policy Agent, Conftest) na PR/MR.

Policy as Code a kontrolní brány

Definujte zásady (např. zákaz otevřených SSH, povinné auditd) jako strojově vyhodnotitelné policy. V pipeline přidejte krok, který validuje manifesty/role/cookbooks proti těmto pravidlům. Nevyhovující změny se nepropustí dál.

Kubernetes a konfigurace aplikací

Pro aplikační konfigurace v K8s kombinujte CM nástroje pro uzly (OS, agenti, runtime) s GitOps operátory (Argo CD/Flux) pro workloady. Secrety řešte přes External Secrets/Sealed Secrets. Udržujte source of truth mimo cluster (Git + Vault) a propojte validace (OPA Gatekeeper/ Kyverno).

Windows a hybridní prostředí

Ansible (win_* moduly), Puppet (Windows resources) a Chef (Windows cookbooks) podporují správu Windows. Pipeline musí mít runner s Windows exekutorem, integrační testy v Hyper-V nebo AWS/GCP. Pro AD/GPO integrujte ověřování a pečlivě izolujte doménová privilegia.

Výkonnost a škálování

  • Paralelizace: Ansible forks, Puppet orchestrator, Chef push jobs. Opatrně u sdílených backendů (DB, registry) – dbejte na limity.
  • Cache: pip/apt/yum cache, Galaxy/Forge/Community cache; mirrorujte repozitáře do lokální sítě.
  • Re-usable pipelines: šablony, composite actions, shared libraries v Jenkinsu.

Migrační strategie a kompatibilita

Při přechodu mezi verzemi nástrojů nebo OS držte dual-run období: stejné hosty spravuje nová i stará verze v „noop/check“ režimu, porovnáváte dify a teprve poté přepínáte. Semver a deprekační plány komunikujte dopředu.

Nejčastější antipatterny

  • Imperativní skripty ve CM: shell skripty bez idempotence; místo toho používejte nativní resource typy.
  • Konfigurační data v kódu: mix hodnot a logiky; patří do Hiera/group_vars/Policyfiles.
  • One-off manuální zásahy: vedou k driftu; jakýkoli hotfix zaznamenejte jako PR/MR.
  • „Snowflake“ servery: unikátní ruční konfigurace; standardizujte role a profily.

Měřitelnost a KPI

  • MTTR: čas návratu do cílového stavu po poruše.
  • Change failure rate: podíl releasů s rollbackem.
  • Lead time for changes: od PR do nasazení.
  • Drift index: počet uzlů mimo deklarovaný stav.

Checklist pro produkční nasazení

  1. Repo má jasnou strukturu (role/moduly/cookbooks, data oddělená v Hiera/group_vars/Policyfiles).
  2. Pipeline obsahuje lint, unit, integration a compliance testy, plus policy-as-code.
  3. Secrety řeší secret manager, runner má minimální oprávnění.
  4. Artefakty jsou verzované a podepsané, existuje promote mezi prostředími.
  5. Rollout strategie (canary/batch) a automatický rollback podle metrik.
  6. Observabilita: centralizované logy, metriky, reporty z agentů.
  7. Runbooky pro incidenty a dokumentované 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, testech a řízení dat. Začněte malou službou, standardizujte vzory (role/profily/policy), budujte pipeline s důrazem na kvalitu a postupně rozšiřujte na celý ekosystém.

Pridaj komentár

Vaša e-mailová adresa nebude zverejnená. Vyžadované polia sú označené *