Какой у вас опыт работы с pre-commit?

«Какой у вас опыт работы с pre-commit?» — вопрос из категории Git, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Я внедрял и поддерживал 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

Мои задачи и подходы:

  1. Создание единого .pre-commit-config.yaml для всей команды DevOps
  2. Интеграция в CI/CD — дублирование проверок в GitLab CI/GitHub Actions для защиты от bypass
  3. Кастомные хуки для специфичных нужд:
    • Проверка naming convention для ресурсов AWS/GCP
    • Валидация тегов Docker образов
    • Проверка наличия комментариев в сложных Terraform модулях
  4. Оптимизация производительности через кэширование и исключение файлов

Пример кастомного хука для проверки 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 модулей