Рекомендации по использованию правил ревью кода в Yandex Managed Service for GitLab
Managed Service for GitLab позволяет гибко настраивать обязательные правила ревью кода, прежде чем код может быть добавлен в целевую ветку проекта. Функциональность является альтернативой встроенному в GitLab Enterprise Edition инструменту Approval Rules
Конфигурация правил ревью в Managed Service for GitLab настраиваются только в виде кода (Configuration as Code) в файлах APPROVALRULES и (опционально) CODEOWNERS.
Подробнее читайте на странице Правила ревью кода в Yandex Managed Service for GitLab.
Важно
За использование правил ревью кода в Managed Service for GitLab взимается плата в зависимости от используемой конфигурации. Подробнее читайте на странице Правила тарификации для Yandex Managed Service for GitLab.
В разделе приведены примеры файлов APPROVALRULES и (опционально) CODEOWNERS для следующих типовых сценариев:
- Пример настройки правил для ревью от конкретных пользователей
- Пример настройки правил для двухэтапного ревью
- Пример настройки правил для ревью изменений в CI/CD
Помимо правил ревью кода в репозитории может быть настроена защита ветокmain, и защищены только от прямых внесений изменений (direct push).
Правила ревью кода начинают действовать после того, как изменения в файлах APPROVALRULES и (опционально) CODEOWNERS будут влиты в основную ветку
Важно
По умолчанию основная ветка репозитория защищенаMaintainer.
У пользователей, выполняющих ревью мерж-реквестов, должна быть минимальная роль Reporter в проекте GitLab, в большинстве случаев используется более привилегированная роль Developer.
Предварительные действия
-
Если у вас еще нет инстанса GitLab, создайте и активируйте его.
-
Если у вас еще не сконфигурированы правила ревью кода в инстансе и проекте GitLab, настройте их.
Примечание
Минимальная конфигурация для функциональности правил ревью кода указана в каждом примере.
-
Создайте пользователей и группы
согласно примерам ниже. -
Создайте файлы
APPROVALRULESи (опционально)CODEOWNERSв основной ветке репозитория согласно примерам ниже.
Пример настройки правил для ревью от конкретных пользователей
|
Минимальная конфигурация |
Комментарий |
|
Базовая |
|
В примере представлен сценарий для обязательных проверок мерж-реквестов специалистами по информационной безопасности. Для слияния с веткой release требуется одобрение мерж-реквеста от одного из пользователей с username: security-expert1 или security-expert2.
Сценарий также подходит для других простых случаев, когда вы хотите защитить одну ветку и назначать конкретных согласующих.
Содержимое файла APPROVALRULES:
# Правила ревью
ApprovalRules:
# Произвольное название правила
- SecurityReview:
# Список пользователей (username), которые могут одобрить мерж-реквест
approvers:
- "security-expert1"
- "security-expert2"
# Требуемое количество одобрений
count: 1
# Группы веток, к которым применяются правила
BranchGroups:
# Произвольное название группы веток
- Release:
# Список веток, к которым применяются правила
branches:
- release
# Применяемые правила
rules:
- SecurityReview
В результате при создании мерж-реквеста в ветку release в поле Reviewer автоматически назначается один из указанных пользователей, а сам мерж-реквест блокируется до того, как будет одобрен.
Совет
Вместо блока approvers с конкретными пользователями вы можете использовать блок groups для указания группы
Пример
ApprovalRules:
- SecurityReview:
groups:
- "soc"
- "secops"
count: 1
...
В таком случае согласующим в мерж-реквест будет автоматически добавляться один из пользователей, состоящий в одной из этих групп.
Одновременное использование блоков approvers и groups в одном правиле избыточно.
Пример настройки правил для двухэтапного ревью
|
Минимальная конфигурация |
Комментарий |
|
Продвинутая |
|
В примере представлен сценарий для обязательных проверок мерж-реквестов в два этапа:
- Для слияния с веткой
stageтребуется одно одобрение от разработчика из группыdevs— код проверяется на корректность, стиль, тесты и архитектуру. - Для слияния с веткой
releaseтребуются два одобрения: от разработчика из группыdevsи от технического лида из группыtech-leads, который оценивает соответствие бизнес-целям и стандартам команды.
Соответственно подразумевается, что сначала изменения попадают из основной ветки, в которой ведется разработка, например dev, на стейджинг (ветка stage) и тестируются там, а уже после этого — в релиз (ветка release).
Вы также можете адаптировать сценарий для случаев, когда для слияния мерж-реквестов в разные ветки требуются разные правила ревью.
Содержимое файла APPROVALRULES:
# Правила ревью
ApprovalRules:
# Произвольное название правила
- TechnicalReview:
# Список групп, участники которых могут одобрить мерж-реквест
groups:
- devs
# Требуемое количество одобрений
count: 1
- LeadApproval:
groups:
- tech-leads
count: 1
# Группы веток, к которым применяются правила
BranchGroups:
# Произвольное название группы веток
- Stage:
# Список веток, к которым применяются правила
branches:
- stage
# Применяемые правила
rules:
- TechnicalReview
- Release:
branches:
- release
rules:
- TechnicalReview
- LeadApproval
В результате при создании мерж-реквеста в ветку stage в поле Reviewer автоматически назначается один из участников группы devs, а сам мерж-реквест блокируется до того, как будет одобрен. После мержа изменения тестируются на стейджинге.
Далее разработчик создает мерж-реквест из ветки stage в ветку release. В поле Reviewer автоматически назначаются один из участников группы devs и один из участников группы tech-leads, а сам мерж-реквест также блокируется до того, как получит оба одобрения.
Совет
Вместо блока groups с группамиapprovers для указания конкретных пользователей.
Пример
ApprovalRules:
- TechnicalReview:
approvers:
- "dev1"
- "dev2"
count: 1
...
В таком случае согласующим в мерж-реквест будет автоматически добавляться один из указанных пользователей.
Одновременное использование блоков approvers и groups в одном правиле избыточно.
Пример настройки правил для ревью изменений в CI/CD
|
Минимальная конфигурация |
Комментарий |
|
Стандартная |
|
В примере представлен сценарий для обязательных проверок мерж-реквестов DevOps-инженерами, только если была затронута конфигурация CI/CD. Если в мерж-реквесте были изменены файл .gitlab-ci.yml или файлы с расширением .yml в директории ci/, то для слияния с веткой release требуется одобрение от одного из участников группыdevops-team.
Сценарий также подходит для других случаев, когда вы хотите разграничить область ревью в разных директориях или файлах репозитория для разных команд или пользователей.
Фильтрация по путям не поддерживается в APPROVALRULES, поэтому используйте совместно с правилами ревью механизм Code Ownership.
Содержимое файла CODEOWNERS:
# <Пути_к_файлам_или_паттерны_фильтрации> @<ответственная_группа>
.gitlab-ci.yml @devops-team
ci/*.yml @devops-team
Содержимое файла APPROVALRULES:
# Группы веток, к которым применяются правила
BranchGroups:
# Произвольное название группы веток
- Release:
# Список веток, к которым применяются правила
branches:
- release
# Применяемые правила
rules:
- CODE_OWNERS
В результате при создании мерж-реквеста в ветку release, затрагивающего файлы .gitlab-ci.yml или ci/*.yml, в поле Reviewer автоматически назначается один из участников группы devops-team, а сам мерж-реквест блокируется до того, как будет одобрен.
Совет
Рекомендуется применять правила Code Ownership точечно — только для веток, куда попадают финальные изменения. Однако вы также можете применить их ко всем веткам.
Пример
BranchGroups:
- All:
branches:
- "*"
rules:
- CODE_OWNERS
См. также
- Правила ревью кода в Yandex Managed Service for GitLab
- Настройка правил ревью кода в Yandex Managed Service for GitLab
- Создание и активация инстанса Managed Service for GitLab