Ответ
Для версионирования плейбуков Ansible я использую Git с семантическим версионированием (SemVer). Все инфраструктурные конфигурации хранятся в репозитории с четкой структурой и тегами.
Структура репозитория:
infrastructure/
├── ansible/
│ ├── playbooks/
│ │ ├── deploy_app.yml
│ │ └── configure_db.yml
│ ├── roles/
│ │ ├── nginx/
│ │ └── postgresql/
│ ├── inventories/
│ │ ├── production/
│ │ └── staging/
│ ├── group_vars/
│ ├── host_vars/
│ └── ansible.cfg
├── terraform/
├── scripts/
└── README.md
Ключевые практики:
-
Тегирование версий:
git tag -a v1.3.0 -m "Add PostgreSQL 14 support and TLS configuration" git push origin v1.3.0 -
Управление зависимостями через
requirements.yml:# ansible/requirements.yml - src: https://github.com/geerlingguy/ansible-role-nginx version: 3.1.0 name: nginx_role - src: git@internal.gitlab.com:infra/postgres-role.git version: v2.0.1 name: postgresqlУстановка:
ansible-galaxy install -r requirements.yml -
Хранение секретов: Все чувствительные данные (пароли, ключи) шифрую с помощью
ansible-vault:ansible-vault encrypt inventories/production/group_vars/all/vault.yml -
CI/CD интеграция: В GitLab CI/CD запускаю линтер
ansible-lintи тесты сmoleculeперед созданием тега. -
Документация изменений: Веду
CHANGELOG.mdв формате Keep a Changelog для отслеживания изменений между версиями.