Политики policy.yml
Политики в Gitlab — это ограничения, которые помогают обезопасить ваш проект. Например, с помощью политики
allow_author_approval вы можете запретить автору мерджа аппрувить самого себя.
Подробности.
Обязательных настроек нет.
Чтобы настроить политику:
- Найдите файл
policy.ymlв вашем репозитории. Если его нет — создайте. Используйте только расширение.YML. - Заполните поля в файле, можете использовать синтаксис 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. Регулярное выражение — имена файлов, которые нельзя заливать в репозиторий.