Pre-commit хуки для IaC
CI/CD · IaC
Проблема
В репозиторий с Terraform/Ansible/YAML регулярно прилетают PR с неформатированным кодом, дрейфом версий, секретами в .tf-файлах (aws_access_key = "AKIA...") и YAML с кривой вложенностью. Линтеры существуют, но прогонять их руками никто не хочет, а CI ловит проблемы уже после pushа.
Решение
Собрать под одним зонтом pre-commit.com три проверенных хука: tflint (Terraform), yamllint (YAML) и detect-secrets (секреты). Конфиг один, версии зафиксированы, локально и в CI — одно и то же.
Пример
.pre-commit-config.yaml:
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v5.0.0
hooks:
- id: end-of-file-fixer
- id: trailing-whitespace
- id: check-yaml
- repo: https://github.com/antonbabenko/pre-commit-terraform
rev: v1.96.2
hooks:
- id: terraform_fmt
- id: terraform_tflint
args: [--args=--config=.tflint.hcl]
- repo: https://github.com/adrienverge/yamllint
rev: v1.35.1
hooks:
- id: yamllint
args: [-c=.yamllint]
- repo: https://github.com/Yelp/detect-secrets
rev: v1.5.0
hooks:
- id: detect-secrets
args: ['--baseline', '.secrets.baseline']
Установка:
pip install pre-commit
pre-commit install
detect-secrets scan > .secrets.baseline
pre-commit run --all-files # бэкфилл по существующему коду
В CI — один шаг:
- uses: pre-commit/action@v3.0.1
Когда применять
- Любой репозиторий с IaC/Ansible/Kubernetes-манифестами.
- Когда команда из 3+ человек — расхождения в форматировании становятся дороже, чем настройка хуков.
Источник
Как применить у себя
- Добавить
.pre-commit-config.yamlс тремя хуками. - Один раз —
detect-secrets scan > .secrets.baselineи закоммитить baseline. pre-commit installна всех dev-машинах + шаг в CI.- Первый раз прогнать по всему репо, закоммитить формат-правки отдельным коммитом.
- После того как кто-то из команды попытался запушить ключ и был остановлен — статус Изучено.