Skip to content

Ansible Playbook

Dokumentacja techniczna

Kompletny pipeline CI/CD dla projektów Ansible Playbook. Obsługuje walidację statyczną, instalację ról Galaxy, testy składni i dry-run oraz deployment na środowiska zdefiniowane w GitLab.

W projekcie dodaj do .gitlab-ci.yml:

include:
  - project: pl.rachuna-net/flows/gitlab
    file: pipelines/ansible-playbook/.gitlab-ci.yml
    ref: main

variables:
  PROJECT_TYPE: ansible-playbook

Oczekiwana struktura repozytorium projektu:

twoj-projekt/
├── playbooks/
│   └── install.yml          # playbook (ANSIBLE_PLAYBOOK_NAME)
├── inventory/
│   └── hosts.yml            # inventory (ANSIBLE_INVENTORY_PATH)
└── requirements.yml         # role Galaxy (REQUIREMENTS_FILE_PATH)
.pre        → 🕵 Set Version
validate    → 🔍 Analyze Conventional Commits
            → 🕵 yamllint           (tylko gdy zmienił się *.yml/*.yaml)
            → 🐚 shellcheck         (tylko gdy zmienił się *.sh/*.sh.yml)
            → 🔍 ansible-lint
dependency  → 📦 dependency
tests       → 🧩 ansible-syntax     (needs: ansible-lint + dependency)
            → 🔍 ansible-check      (needs: ansible-syntax + ansible-lint + dependency)
publish     → 📍 Publish Version    (needs: Set Version + validate joby + ansible-check)
.pre        → 🕵 Set Version
            → 🔧 Prepare Dynamic Deployment
dependency  → 📦 dependency
deployment  → 🚀 Trigger Deployment  → child pipeline:
                                          💥 Deployment:<ENV_NAME>  (per środowisko)
publish     → 📍 Publish Version
JobNazwa emojiStageCICD
versioning (Set Version)🕵 Set Version.pre
environment-deployment-prepare🔧 Prepare Dynamic Deployment.pre
conventional-commits🔍 Analyze Conventional Commitsvalidate
yamllint🕵 yamllintvalidate✅*
shellcheck🐚 shellcheckvalidate✅*
ansible-lint🔍 ansible-lintvalidate
dependency📦 dependencydependency✅**
build🚀 buildbuild
ansible-syntax🧩 ansible-syntaxtests
ansible-check🔍 ansible-checktests
unit-test🧪 unit-testtests
trigger-deployment🚀 Trigger Deploymentdeployment
deployment💥 deploymentdeployment✅**
publish🌐 publishpublish
versioning (Publish Version)📍 Publish Versionpublish

* tylko gdy zmienił się odpowiedni typ pliku względem main ** uruchamia się w child pipeline (CI_PIPELINE_SOURCE == "parent_pipeline")

Statyczna analiza kodu Ansible. Uruchamia ansible-lint --force-color . na całym repozytorium.

Instaluje role Ansible Galaxy z pliku requirements.yml:

ansible-galaxy install -r "$REQUIREMENTS_FILE_PATH" -p playbooks/roles -f

Wynik zapisuje do cache (key: $CI_PROJECT_ID, policy: pushplaybooks/roles/). Kolejne joby (ansible-syntax, ansible-check, deployment) pobierają role z cache (policy: pull).

Sprawdza składnię każdego playbooka w ANSIBLE_PLAYBOOKS_PATH:

ansible-playbook -i "$ANSIBLE_INVENTORY_PATH" --syntax-check "$playbook"

Opcjonalne argumenty: ANSIBLE_PLAYBOOK_EXTRA_ARGS.

Dry-run każdego playbooka (łączy się z hostami, nie wprowadza zmian):

ansible-playbook -i "$ANSIBLE_INVENTORY_PATH" --check "$playbook"

Wymaga SSH key (gitlab_ssh_key w before_script). Zależy od: ansible-syntax, ansible-lint, dependency.

💥 deployment (deployment — child pipeline)

Section titled “💥 deployment (deployment — child pipeline)”

Uruchamia check mode playbooka na konkretnym środowisku GitLab:

ansible-playbook \
  -i "$ANSIBLE_INVENTORY_PATH" \
  --check \
  "${ANSIBLE_PLAYBOOKS_PATH}/${ANSIBLE_PLAYBOOK_NAME}" \
  --limit "$CI_ENVIRONMENT_NAME"

Uruchamiany jako child pipeline triggerowany przez 🚀 Trigger Deployment (jeden job per środowisko z GitLab Environments).

Zmienne Ansible (wspólne dla syntax, check, deployment)

Section titled “Zmienne Ansible (wspólne dla syntax, check, deployment)”
ZmiennaDomyślnaOpis
ANSIBLE_PLAYBOOKS_PATHplaybooksKatalog z playbook’ami
ANSIBLE_PLAYBOOK_NAMEinstall.ymlNazwa pliku playbooka (deployment)
ANSIBLE_INVENTORY_PATHinventory/hosts.ymlŚcieżka do inventory
ANSIBLE_USERrootUżytkownik SSH
ANSIBLE_HOST_KEY_CHECKINGfalseWyłączenie sprawdzania host key
ANSIBLE_FORCE_COLORtrueKolorowy output
VAULT_SKIP_VERIFY"true"Pominięcie weryfikacji Vault TLS
ANSIBLE_PLAYBOOK_EXTRA_ARGSDodatkowe argumenty ansible-playbook
ZmiennaDomyślnaOpis
REQUIREMENTS_FILE_PATHrequirements.ymlŚcieżka do pliku requirements

Wszystkie joby uruchamiane na runnerze z tagiem gitlab-rnp.

.pipelines.ansible-playbook.*