Setting up approval rules
With Managed Service for GitLab, you can flexibly set up mandatory approval rules before merging code into the target branch of the project. For more information on how approval rules work, see Approval rules.
Before getting started, create a service account with administrator privileges and add it to your GitLab project. Assign the Maintainer or Owner role
To use approval rules:
- Create a GitLab token.
- Enable approval rules.
- Configure approval rules.
- Set up Code Ownership (available in Standard and Advanced configurations).
Enable debugging mode and check out the exception handling rules.
Create a GitLab token
You need a GitLab token to enable approval rules and access the repository, since the token is used for GitLab API authentication.
To create a token:
-
Open your GitLab instance.
-
Click the profile icon and select Edit profile.
-
Go to Access Tokens in the left-hand menu.
-
Click Add new token.
-
In the window that opens, enter a name in the Token name field to easily locate the token in your GitLab project.
-
In the Expiration date field, specify the date when the token expires.
The default value is one month from the token creation date, and the maximum is one year. The token expires at 00:00 UTC on the specified date.
-
Under Select scopes, select api.
-
Click Create personal access token.
This will generate a new token.
-
Copy and save it, as you will not be able to copy it later in GitLab.
Enable approval rules
- Activate the GitLab setting that prevents merging into the target branch until every thread in the merge request is resolved:
- Open your project in GitLab.
- In the left-hand menu, select Settings → Merge requests.
- Under Merge checks, enable All threads must be resolved.
- Click Save changes.
- Add a system hook:
- Open your GitLab instance.
- In the left-hand menu, select Search or go to → Admin Area.
- In the left-hand menu, select System Hooks.
- Click Add new webhook.
- Configure the hook as follows:
- URL:
http://localhost:24080/default. - In the Trigger section, disable all options except Merge request events, Push events, and Repository update events.
- URL:
- Click Add webhook.
- Enable the GitLab setting which allows sending messages to the local network:
- Open your GitLab instance.
- In the left-hand menu, select Search or go to → Admin Area.
- In the left-hand menu, select Settings → Network.
- Under Outbound requests, enable Allow requests to the local network from system hooks.
- In the list of IP addresses and domain names, specify
http://localhost:24080. - Click Save changes.
- Enable approval rules in your Managed Service for GitLab instance:
-
In the Yandex Cloud management console
, select the folder containing your GitLab instance. -
Go to Managed Service for GitLab.
-
Select the instance and click
Edit at the top of the page. -
In the Approval rules field, select the approval rule configuration.
Note
The configuration you select affects the cost of using the instance computing resources.
-
In the Gitlab token field, specify the token you created earlier.
-
Click Save.
-
Tip
If you encounter issues when accessing the system hook, use the 127.0.0.1 IP address instead of localhost:
- In the system hook settings (Admin area → System Hooks), change the URL value to
http://127.0.0.1:24080/default. - In the GitLab settings that allow sending messages to the local network (Admin area → Settings → Network → Expand outbound requests, the CIDR input field), add
http://127.0.0.1:24080to the list of IP addresses and domain names.
Configure approval rules
The approval rules for the repository are stored in the APPROVALRULES file in the root directory. The configuration is read from the default branch
The file consists of two sections:
ApprovalRules: Describes the rules.BranchGroups: Describes which branches the rules apply to.
The structure of the APPROVALRULES file is as follows:
ApprovalRules:
- <rule_name>:
approvers:
- <username>
...
groups:
- <group_name>
...
count: <required_number_of_approvals>
BranchGroups:
- <branch_group_name>:
branches:
- <branch_name>
...
rules:
- <rule_name>
...
Where:
approvers: Names of GitLab users who can approve the merge request. The users must be added to the project either directly or via a group. When counting approvals, the merge request author is not counted in. A user on this list who has committed to the merge request and is not the author can also be an approver.groups: List of names of GitLab groups whose members can approve the merge request (except for members of the group for which this group is a subgroup).count: Integer from0to100. If it is0, the rule is optional.branches: List of names of branches where changes must be approved.rules: List of rules that apply to the specified branches.
You may use the * wildcard instead of usernames and in branch names.
For example, to apply the four-eyes principle to the repository main branch, add the following to the
APPROVALRULESfile:ApprovalRules: - FourEyesRule: approvers: - "*" count: 1 BranchGroups: - Master: branches: - master rules: - FourEyesRule
Set up code ownership
This feature is available in Standard and Advanced configurations.
The code ownership settings for the repository are stored in the CODEOWNERS file in the root directory. The configuration is read from the default branch
The file structure follows GitLab syntax
Note
If multiple entries in the CODEOWNERS file include the same file or directory at once, the rules from the most recent entry apply.
To use the code ownership settings when handling merge requests on specific branches, add the following entry to the APPROVALRULES file:
BranchGroups:
- <branch_group_name>:
branches:
- <branch_name>
...
rules:
- CODE_OWNERS
Debugging
Add the detailed_AR keyword to a merge request description to show detailed information on each rule in a thread:
- Users who have approved the merge request.
- Number of approvals still needed.
- Users who can still approve the merge request.
Handling exceptions
Incorrect configuration of approval rules
Issues related to the APPROVALRULES file are handled as follows:
- If the file is missing from the repository, no approval rules apply to the repository's merge requests.
- If the file is available but is configured incorrectly:
- Users with the
Maintainerrole receive an email notification about the error. - All merge requests for this repository are blocked.
- Users with the
Bypassing the rules
If you need to commit merge request changes, but the responsible team members are not available, a user with the Maintainer role or higher can commit the changes by bypassing the existing approval rules:
- Add
force_mergeas a comment in the merge request. - Update the merge request description so that Managed Service for GitLab is notified of the changes in the merge request.
This will resolve the thread and unblock the merge request. Users with the Maintainer role or higher will receive an email notification about the violated approval workflow.