Ответ
Я внедрял и поддерживал pre-commit хуки в нескольких DevOps-проектах для обеспечения качества инфраструктурного кода (Terraform, Ansible, Dockerfiles) и скриптов.
Конкретные хуки, которые я настраивал:
Для Terraform:
- repo: https://github.com/antonbabenko/pre-commit-terraform
rev: v1.81.0
hooks:
- id: terraform_fmt
- id: terraform_validate
- id: terraform_docs
- id: terraform_tflint
Для Ansible:
- repo: https://github.com/ansible/ansible-lint
rev: v6.22.1
hooks:
- id: ansible-lint
args: [--profile=production]
Для общих проверок:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.4.0
hooks:
- id: check-yaml
- id: check-json
- id: check-added-large-files
- id: detect-private-key
- id: trailing-whitespace
Мои задачи и подходы:
- Создание единого
.pre-commit-config.yamlдля всей команды DevOps - Интеграция в CI/CD — дублирование проверок в GitLab CI/GitHub Actions для защиты от bypass
- Кастомные хуки для специфичных нужд:
- Проверка naming convention для ресурсов AWS/GCP
- Валидация тегов Docker образов
- Проверка наличия комментариев в сложных Terraform модулях
- Оптимизация производительности через кэширование и исключение файлов
Пример кастомного хука для проверки Terraform переменных:
#!/bin/bash
# .pre-commit/check-tf-vars.sh
for file in $(git diff --cached --name-only | grep -E '.tfvars$'); do
if ! terraform validate -var-file="$file" > /dev/null 2>&1; then
echo "Invalid variables in $file"
exit 1
fi
done
Результаты внедрения:
- Снижение количества ошибок в проде из-за опечаток в конфигах
- Единый стиль кода в команде из 5+ человек
- Автоматическое обновление документации при изменении Terraform модулей