Skip to main content

Управление динамическими правилами Approve с помощью CI

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

Например, вы SRE и хотите, чтобы никто не мог изменить количество реплик без Approve от вашей команды. Тогда вы описываете динамическое правило, которое проверяет содержимое merge request. Если в нём изменили реплики, человек не сможет выкатить изменение без вас.

Шаг 1. Настройте сервис-аккаунт

  1. Создайте сервис-аккаунт. В шаге 2 выберите «MR custom approval rules».
  2. Создайте ключ.

Шаг 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:

  1. Найдите в вашем репозитории файл .gitlab-ci.yml.

  2. Пропишите команды в поле 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;
    • от того, как прошёл пайплайн;
    • от многого другого.
  3. Создайте merge request и выложите изменения.

Если создать merge в master во время джобы правило Approve будет прописываться автоматически.