Skip to main content

Политики policy.yml

Политики в Gitlab — это ограничения, которые помогают обезопасить ваш проект. Например, с помощью политики allow_author_approval вы можете запретить автору мерджа аппрувить самого себя. Подробности.

Обязательных настроек нет.

Чтобы настроить политику:

  1. Найдите файл policy.yml в вашем репозитории. Если его нет — создайте. Используйте только расширение .YML.
  2. Заполните поля в файле, можете использовать синтаксис RE2. Указывайте строковые значения в кавычках: «'».

Полный файл с политиками: policy.yml

project:
allow_merge_on_skipped_pipeline: false
protected_branches:
- 'develop' # Допускается любая string или wildcard
- 'release*' # Regexp не поддерживается.
badges:
- type: Coverage
- type: Pipeline

commit_template:
merge: |-
My custom merge branch '%{source_branch}' into '%{target_branch}'

%{title}

%{issues}

See merge request %{reference}

squash: "My custom squash commit: %{title}"
suggestion: "My custom Apply %{suggestions_count} suggestion(s) to %{files_count}"

merge_request:
method: 'fast-forward'
squash: 'encourage'
enable_delete_branch: false
resolve_outdated_diff_discussions: false
fork_whitelist:
- 'src/**/*'
allow_author_approval: false
 allow_commit_skip_approvals: false  
auto_merge: false
auto_rebase: scheduled

push_rules:
commit_message: 'DEV-\d+'
branch_name: '(?:(?:BNPLAPP-\d+)|master|develop)'

Политики проекта

policy.yml

project:
allow_merge_on_skipped_pipeline: false
protected_branches:
- 'develop' # Допускается любая string или wildcard
- 'release*' # Regexp не поддерживается.
badges:
- type: Coverage
- type: Pipeline

allow_merge_on_skipped_pipeline

Тип данных: Boolean. Значение по умолчанию — false.

Возможность мерджить изменения, если пайплайн был пропущен.

protected_branches

Тип данных: Array[String]

Защищённая ветка — это ветка, изменения в которую можно внести только через merge requests. Яркий пример — master. Подробности.

Список защищённых веток, в которые можно внести изменения только через merge request из другой ветки. Запишите её имя полностью или через wildcard. Подробности.

Ветка master всегда защищена.

badges

Тип данных: Array[Object].

Бейдж — это небольшое изображение с информацией о вашем проекте. Подробности —.

\

type — настройка бейджа. Тип данных: Enum.

Значения:

  • Coverage — пресет для бейджа. Значение code coverage берут из ветки master, если нет настроенной джобы, которая собирает покрытие. Подробности.

  • Pipeline — статус последнего пайплайна.

  • Custom — используется с настройками:

    • name — имя бейджа.
    • link_url — ссылка, на которую переходят при нажатии на бейдж. Можете использовать плейсхолдеры.
    • image_url — ссылка, по которой лежит файл-иллюстрация. Можете использовать плейсхолдеры.

Тип данных настроек: String.

policy.yml

project:
commit_template:
merge: |-
My custom merge branch '%{source_branch}' into '%{target_branch}'

%{title}

%{issues}

See merge request %{reference}

squash: "My custom squash commit: %{title}"
suggestion: "My custom Apply %{suggestions_count} suggestion(s) to %{files_count}"

commit_template

Тип данных: Object.

Список шаблонов сообщений для коммитов. Значения:

  • merge — шаблон для merge-commit, используется при способах влития merge request — merge и rebase_merge.
  • squash — шаблон для squash-commit. Сработает, если нажать Squash commits. Применяется даже к одиночным коммитам.
  • suggestion — шаблон для suggestion-commit.

Плейсхолдеры для шаблонов squash и merge

Для многострочных шаблонов используйте экранирование[ «[|-]», тогда можно не использовать кавычки, если они не нужны в сообщении коммита.

Пример:

...
commit_template:
merge: |-
My custom merge branch '%{source_branch}' into '%{target_branch}'
     %{description}

Политики merge request

policy.yml

merge_request:
method: 'fast-forward'
squash: 'encourage'
enable_delete_branch: false
resolve_outdated_diff_discussions: false

method

Тип данных: Enum.

Способ слияния merge request:

  • fast-forward или ff — значение по умолчанию;
  • merge;
  • rebase_merge.

Подробности

squash

Тип данных: Enum.

Squash — объединение коммитов. Значения:

  • encourage — значение по умолчанию — автоматически выставляет флаг squash, но пользователь сможет отключить его в конкретном merge request.

  • allow — не выставляется, но пользователь сможет включить его в конкретном merge request.

  • always — выставляется автоматически, пользователь не сможет его отключить.

Подробности

enable_delete_branch

Тип данных: Boolean.

Управляет значением по умолчанием кнопки Delete branch after merge при создании merge request:

  • true — значение по умолчанию — автоматически выставлено, что ветка удалится;
  • false — если пользователь хочет удалить ветку, он должен нажать кнопку сам.

resolve_outdated_diff_discussions

Тип данных: Boolean.

Управляет поведением GitLab при изменении кода, к которому открыта дискуссия:

  • true — значение по умолчанию — обсуждение закроется, когда изменят код;
  • false — обсуждение закроется вручную.

policy.yml

merge_request:
fork_whitelist:
- 'src/**/*'
allow_author_approval: false
 allow_commit_skip_approvals: false  
auto_merge: false
auto_rebase: scheduled

fork_whitelist

Тип данных: Array[String].

Укажите в правиле файлы, для которых будет автоматически создаваться CI pipeline с проектным токеном GitLab, если сделают Fork-репозиторий. Если какие-то файлы не попадут в список, [бот напишет вам их названия в комментарии, а пайплайн в upstream-репозитории запущен не будет.

Например, вы создали merge request из Fork-репозитория, с изменениями, не попадающими под политику fork_whitelist, тогда job запустится с вашими правами в fork-пайплайне, и не унаследует проектные и групповые CI-переменные. Теперь только пользователи с ролью Gitlab Developer в этом репозитории смогут перезапустить pipeline.

Поддерживаются глоб-маски.

В рамках fork pipeline могут быть выполнены только Job с правилами:

rules:
- if: '$CI_PIPELINE_SOURCE == 'merge_request_event''
when: always

Также поддерживается:

only: - merge_requests

allow_author_approval

Тип данных — Boolean.

Правило регулирует, может ли автор merge request может поставить Approve сам себе:

  • true — может;
  • false — значение по умолчанию — не может.

allow_commit_skip_approvals

Тип данных — Boolean. Значение по умолчанию — false.

Чтобы использовать политику, у вас должна быть роль "Gitlab Skip Approve". Подробнее о ролях.

Значения:

  • false — аппрувы обязательны.

  • true — сбор апрувов можно пропустить, если нажать Skip approvals.

    В виджете отобразится "The approval rules was skipped by [пользователь, пропустивший сбор аппрувов]". Merge будет доступен без сбора необходимых апрувов. Чтобы отменить действие, нажмите Collect approvals.

auto_merge

Тип данных — Boolean. Значение по умолчанию — false.

Автоматический merge для merge request, которые подходят под условия:

  • target branch — это master или "^release.*";
  • pipeline пройден успешно;
  • нет конфликтов с веткой target;
  • собраны аппрувы merge request.
  • pipeline пройден на апстримном репозитории, для форков нужна политика fork_whitelist или запустить джобу в merge request вручную

Если у вашего репозитория стратегия fast-forward, настройте политику auto_rebase.

Auto-merge делает бот, у которого есть права только в пределах тенанта и группы в Gitlab. Если после merge запускается пайплайн, в котором триггерится джоба в другом тенанте, у бота не хватит прав её запустить.

auto_rebase

Enum. Значение по умолчанию — false.

Политика автоматического rebase открытых merge request для репозиториев, где ветка target — это master или "^release.*".

Значение — когда происходит rebase, отставая от ветки target:

  • always — не чаще одного раза в 5 минут;

  • scheduled — не чаще одного аза за 2 часа.

    Контролируйте нагрузку на Gitlab с помощью очереди на auto-rebase. На практике это означает, что auto-rebase может проходить реже, чем указано в значении политики.

Если политика не упоминается в policy.yml, авторебейз не запустится.

Auto-rebase реализован средствами Gitlab и не будет выполнен при наличии конфликтов.

Если есть конфликты, сделайте rebase вручную.

Коммиты, имена веток и файлов

policy.yml

push_rules:
commit_message: 'DEV-\d+'
branch_name: '(?:(?:BNPLAPP-\d+)|master|develop)'

commit_message

String. Регулярное выражение — требование к сообщению в commit. Записывается в кавычках.

commit_message_restrictions

String. Регулярное выражение — чего не должно быть в сообщении к commit.

branch_name

String. Регулярное выражение — требования к имени ветки.

files_restrictions

String. Регулярное выражение — имена файлов, которые нельзя заливать в репозиторий.