Как вы использовали Git в DevOps-практиках?

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

Ответ

В DevOps Git — это не просто VCS, а основа всего workflow инфраструктуры как кода (IaC) и CI/CD. Вот как я его применяю:

1. GitOps для инфраструктуры и конфигурации: Все манифесты Kubernetes (Kustomize или Helm values.yaml), Terraform-модули, Ansible playbooks и конфиги приложений хранятся в Git-репозиториях. Изменение в main-ветке автоматически триггерит пайплайны в ArgoCD или Flux для деплоя в кластер.

2. Стратегии ветвления и рабочий процесс:

  • Trunk-based development с короткоживущими feature-ветками: Основная работа ведется в main. Для каждой задачи создается ветка от main, после code review и успешного прохода CI она мержится обратно. Это обеспечивает быструю интеграцию.
    git checkout -b feat/add-prometheus-alerts
    # Вношу изменения в манифесты PrometheusRule
    git add .
    git commit -m "feat: add critical pod restart alerts"
    git push origin feat/add-prometheus-alerts
    # Создаю Pull Request -> запускается CI (проверка yaml, terraform validate) -> после аппрува мердж в main.
  • Изменяемые окружения через Git: Вместо веток dev/staging/prod использую разные каталоги в одном репозитории или разные файлы значений (например, values-prod.yaml) и настраиваю инструменты GitOps (ArgoCD) на деплой из определенного пути или тега.

3. Автоматизация через хуки и CI:

  • Pre-commit хуки: Настраиваю pre-commit framework для автоматической проверки перед коммитом:
    # .pre-commit-config.yaml
    repos:
      - repo: https://github.com/pre-commit/pre-commit-hooks
        rev: v4.4.0
        hooks:
          - id: check-yaml
          - id: end-of-file-fixer
      - repo: https://github.com/antonbabenko/pre-commit-terraform
        rev: v1.81.0
        hooks:
          - id: terraform_fmt
          - id: terraform_validate
  • Семантический коммит и автоматический чинглог: Стараюсь следовать Conventional Commits (feat:, fix:, chore:), что позволяет автоматически генерировать Release Notes и определять семантическое версионирование в CI.

4. Инцидент-менеджмент и постмортемы: Для критических инцидентов создаю ветку incident/<short-description> прямо из коммита, на котором произошел сбой. В этой ветке фиксирую все actions по восстановлению и анализ. После фикса мержу ее с подробным коммитом-постмортемом, который ссылается на тикет в трекере.