Управление динамическими правилами Approve с помощью CI
Динамические правила аппрува обычно используются, чтобы аппруверов назначали в зависимости от изменений в коде.
Например, вы SRE и хотите, чтобы никто не мог изменить количество реплик без Approve от вашей команды. Тогда вы описываете динамическое правило, которое проверяет содержимое merge request. Если в нём изменили реплики, человек не сможет выкатить изменение без вас.
Шаг 1. Настройте сервис-аккаунт
- Создайте сервис-аккаунт. В шаге 2 выберите «MR custom approval rules».
- Создайте ключ.
Шаг 2. Добавьте переменную
Как добавить групповую переменную
Шаг 3. Создайте динамическое правило
Зайдите в свой репозиторий и создайте в нём динамическое правило Approve.
test-custom-rule:
type: 'dynamic'
enabled_by_default: false
count: 1
users:
- 'd.kalinkin@tbank.ru'
- 'm.shiganov@tbank.ru'
Шаг 4. Настройте СI
В нашем примере мы разберём случай, когда правило динамического Approve подключается при merge в master:
-
Найдите в вашем репозитории файл
.gitlab-ci.yml. -
Пропишите команды в поле
scriptпо примеру:stages:
- test
approve:
stage: test
script:
- dp auth service-acc --key-file $sa_key /// #логинимся в Spirit. Название из Шага 4.
- if [ $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "master" ];
then dp mr approval-rules --set --project-path=$CI_MERGE_REQUEST_PROJECT_PATH --mr-iid=$CI_MERGE_REQUEST_IID --name=test-custom-rule;
else echo 'Аппрув не нужен'; fi // используем переменную гитлаба "$CI_MERGE_REQUEST_TARGET_BRANCH_NAME", чтобы получить имя ветки, переменную "$CI_MERGE_REQUEST_PROJECT_PATH", чтобы получить путь к проекту и "$CI_MERGE_REQUEST_IID" для получения mr-iid
only:
- merge_requests #получение переменных, относящихся к MR возможно только с таким флагомВы можете использовать переменную Gitlab и настроить правило в зависимости:
- от комментария к MR;
- от того, как прошёл пайплайн;
- от многого другого.
-
Создайте merge request и выложите изменения.
Если создать merge в master во время джобы правило Approve будет прописываться автоматически.