Ответ
Да, я применял pre-hook'и для реализации проверок "левых врат" (quality gates) в пайплайнах CI/CD, чтобы предотвратить запуск ресурсоемких процессов при наличии очевидных проблем.
Конкретные кейсы использования:
-
Валидация конфигурационных файлов инфраструктуры (Terraform/Ansible) перед
planилиapply:# GitLab CI: этап, выполняемый ДО основного terraform plan validate_infra: stage: validate script: - terraform init -backend=false - terraform validate # Проверка синтаксиса .tf файлов - tflint . # Проверка best practices - checkov --directory . # Статический анализ безопасности инфраструктуры как кода rules: - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH -
Проверка commit message на соответствие соглашению (Conventional Commits):
# pre-commit hook в .git/hooks/commit-msg #!/bin/sh COMMIT_MSG_FILE=$1 COMMIT_MSG=$(cat "$COMMIT_MSG_FILE") PATTERN="^(feat|fix|docs|style|refactor|test|chore|ci)((.+))?: .{1,}$" if ! echo "$COMMIT_MSG" | grep -qE "$PATTERN"; then echo "Ошибка: Commit message не соответствует Conventional Commits." echo "Пример: feat(api): добавить новый эндпоинт" exit 1 fi -
Проверка наличия секретов (ключей, паролей) в коммитируемом коде с помощью
detect-secretsилиgitleaks:# Этап в пайплайне, запускаемый на каждом MR secret_detection: stage: security image: gitleaks/gitleaks script: - gitleaks detect --source . -v --redact allow_failure: false # Жесткий fail при обнаружении секрета -
Проверка синтаксиса Dockerfile:
# Скрипт в пайплайне перед сборкой образа docker run --rm -i hadolint/hadolint < Dockerfile
Использование pre-hook'ов позволяет сэкономить время и ресурсы CI/CD системы, отсекая заведомо некорректные изменения на ранней стадии, и повышает общее качество кода и инфраструктуры, внедряя стандарты автоматически.