Перейти к содержанию

GitLab CI/CD и GitOps

Требования применяются к механизмам изменения local, non-production и production целей через GitLab CI/CD, GitLab Agent или GitOps. Уровни обязательности определены в корневом README.md.

INF-DLV-001. Управляемый pipeline

Уровень: MUST

Применяется к: каждой цели non-production и production

Deployment должен выполняться воспроизводимым GitLab pipeline. Kubernetes pipeline MAY применять конфигурацию через GitLab Agent for Kubernetes или изменять GitOps-репозиторий. Docker-цель MAY использовать защищённый GitLab Runner. Персональные kubeconfig, SSH-команды с рабочей станции и ручной production deployment запрещены.

Обоснование

GitLab pipeline сохраняет исполнителя, входы, commit и результат изменения.

Проверка

  • review job и GitLab deployment history;
  • негативный тест запуска из незащищённой ветки.

Исключения

Аварийное изменение допускается только по runbook с последующей синхронизацией Git.

INF-DLV-002. GitLab Agent

Уровень: MUST

Применяется к: прямому Kubernetes deployment из GitLab CI

Pipeline должен подключаться к кластеру через GitLab Agent for Kubernetes. Доступ агента должен быть ограничен разрешёнными проектами, средами и namespace через ci_access, protected ref/environment и Kubernetes RBAC либо impersonation. Job должен явно выбирать ожидаемый context и проверять cluster identity до изменения. Передача постоянного административного kubeconfig в CI variables запрещена.

Обоснование

Agent предоставляет управляемую границу без распространения cluster-admin credentials.

Проверка

  • review agent authorization и RBAC;
  • негативный deployment в соседний namespace.

Исключения

Временный bootstrap до установки агента требует ограниченного credential, владельца и срока удаления.

INF-DLV-003. GitOps reconciliation

Уровень: MUST

Применяется к: цели с профилем gitops

Желаемое состояние должно находиться в защищённой ветке GitOps-репозитория. Контроллер должен периодически обнаруживать drift и сообщать о состоянии синхронизации. CI приложения должен изменять release identifier image через merge request или другой аудируемый GitLab workflow, но не обходить контроллер прямым apply. Для каждого набора ресурсов должны быть определены interval, timeout, retry, health criteria, порядок зависимостей и политика prune. Приостановленная либо неуспешная reconciliation production-цели должна создавать alert.

Обоснование

Два независимых писателя создают гонку и неясный источник правды.

Проверка

  • контролируемый drift и наблюдение reconciliation;
  • проверка истории изменения release identifier.

Исключения

Приостановка reconciliation допустима на время инцидента, должна быть зафиксирована и иметь владельца и срок возобновления.

INF-DLV-004. Защита production

Уровень: MUST

Применяется к: production deployment

Job или GitOps merge должен происходить только из защищённой ссылки Git, использовать protected environment и применять требуемые GitLab approvals. Права запуска и подтверждения должны быть отделены от неограниченного изменения pipeline, если это поддерживает модель ролей проекта.

Обоснование

Обычные права разработчика не должны автоматически давать изменение production.

Проверка

  • попытка запуска из незащищённой ветки и пользователем без роли;
  • review protected environment и approval rules.

Исключения

Если один владелец совмещает изменение и подтверждение, разделение ролей MAY отсутствовать при risk acceptance с датой пересмотра; GitLab всё равно должен сохранять личность исполнителя и protected environment.

INF-DLV-005. Сериализация изменений

Уровень: MUST

Применяется к: deployment одной цели

Одновременные deployment одной цели должны сериализоваться. Новый pipeline не должен незаметно отменять выполняющуюся миграцию или оставлять неизвестную версию.

Обоснование

Конкурентные изменения нарушают порядок миграций и результат rollout.

Проверка

  • запуск двух pipelines одной цели;
  • проверка resource group или эквивалентной блокировки.

Исключения

Независимые компоненты MAY развёртываться параллельно при отсутствии общей миграции и общего release gate.

INF-DLV-006. Проверяемый diff

Уровень: MUST

Применяется к: изменению non-production или production

До применения pipeline должен сформировать diff желаемого и текущего состояния либо GitOps diff относительно последней синхронизированной revision. Diff должен обозначать target, release identifier image, создаваемые, изменяемые и удаляемые ресурсы. Ошибка получения current state не должна интерпретироваться как пустая цель без явного bootstrap-режима.

Обоснование

Render показывает желаемое состояние, но не раскрывает фактическое удаление или замену.

Проверка

  • изменение, удаление и rename ресурса;
  • отказ чтения current state;
  • review сохранённого diff.

Исключения

Первичный bootstrap MAY сравниваться с явно пустой целью после проверки её identity.

INF-DLV-007. Продвижение между средами

Уровень: MUST

Применяется к: release, проходящему несколько целей

Продвижение должно изменять только target-specific configuration и ссылку на уже квалифицированный release image. Результат предыдущей цели, обязательные release gates и применимые architecture:DEP-ROL-003 должны проверяться до следующего deployment. Повторная сборка не должна использоваться как продвижение версии; digest рекомендуется по INF-ART-002, но не обязателен.

Обоснование

Продвижение другого артефакта не переносит доказательства предыдущей проверки.

Проверка

  • сравнение release identifier, фактического image и configuration diff между целями;
  • негативный тест проваленного gate.

Исключения

Проект без нескольких сред применяет production gates непосредственно.

INF-DLV-008. Согласованность нескольких репозиториев

Уровень: MUST

Применяется к: конфигурации вне репозитория приложения

Изменение release должно сохранять в GitLab связь merge request приложения, release identifier image, merge request и commit deployment/GitOps-репозитория. Pipeline приложения не должен напрямую записывать в защищённую ветку отдельного репозитория, минуя принятый review/approval workflow.

Обоснование

Раздельные репозитории без общей записи не позволяют восстановить состав release.

Проверка

  • переход по ссылкам в обе стороны;
  • попытка прямого push в защищённую ветку.

Исключения

Автоматический bot merge допустим после выполнения тех же approval rules и с сохранённой identity.

INF-DLV-009. Local-доставка

Уровень: MUST

Применяется к: цели с delivery local

Запуск должен выполняться документированной командой из рабочего checkout, не требовать GitLab Runner или production credential и явно показывать локально собранную либо загруженную версию. Профиль local запрещён для non-production и production.

Обоснование

Упрощённый локальный стек не должен наследовать полномочия удалённой доставки.

Проверка

  • запуск на чистой рабочей станции по документации;
  • валидация manifest;
  • поиск production credentials.

Исключения

Доступ к non-production зависимости MAY использовать персональную короткоживущую identity, если это явно указано.