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, если это явно указано.