Skip to main content

Configure an agent with GitLab

In order to view recipe results and commit changes from a recipe back to GitLab, you'll need to create a GitLab OAuth app and configure the Moderne agent with the appropriate variables.

To assist with that, this guide will:

Prerequisites

  • You will need administrator access to your organization's GitLab account

GitLab configuration

Step 1: Create an OAuth application

  1. Navigate to the Applications page for your organization: https://gitlab.com/groups/<yourorg>/-/settings/applications

  2. Provide an application name and redirect URI. The redirect URI will be in this format: https://<tenantname>.moderne.io:

  3. Pick the following scopes:

Understanding the required scopes

Moderne requests the following OAuth scopes. Each scope is used for a specific set of operations:

ScopeRequiredPurpose
apiYesRequired for write operations only: creating, updating, closing, merging, and approving merge requests, and forking repositories. GitLab does not offer a narrower write scope for merge request operations. This scope is only exercised when a user commits recipe results.
read_userYesUsed to retrieve the authenticated user's identity (username, display name, and email) so that Moderne can associate commits with the correct user.
write_repositoryYesUsed to push commits to repositories via Git-over-HTTP. This scope does not grant API write access — it only allows git push.
emailYesUsed to read the user's primary email address for commit attribution.
Detailed list of GitLab API calls Moderne makes

User identity (uses read_user and email scopes):

API endpointMethodPurpose
/api/v4/userGETRetrieve the authenticated user's profile

Repository access checks (uses api scope, read-only):

API endpointMethodPurpose
/api/graphql (projects query)POSTBatch-verify that the user has access to repositories
/api/v4/namespaces/{id}/existsGETCheck whether a namespace or group exists
/api/v4/projects/{path}GETRetrieve project metadata

Merge request operations (uses api scope, write):

API endpointMethodPurpose
/api/v4/projects/{path}/merge_requestsGETFind existing merge request
/api/v4/projects/{path}/merge_requestsPOSTCreate merge request
/api/v4/projects/{path}/merge_requests/{iid}PUTUpdate merge request title/body
/api/v4/projects/{path}/merge_requests/{iid}PUTClose merge request
/api/v4/projects/{path}/merge_requests/{iid}/mergePUTMerge a merge request
/api/v4/projects/{path}/merge_requests/{iid}/approvePOSTApprove merge request
/api/v4/projects/{path}/merge_requests/{iid}/approvalsGETGet approval status

Fork operations (uses api scope, write):

API endpointMethodPurpose
/api/v4/projects/{path}/forkPOSTCreate fork
tip

The OAuth token is scoped to the individual user who authorizes it — Moderne can only perform actions that the user already has permission to do. The api scope does not grant Moderne any additional access beyond what the user themselves can do in GitLab.

note

You may create the OAuth application at the group level rather than the instance level. Navigate to your group's Settings > Applications to register it there. The OAuth flow works identically regardless of where the application is registered.

  1. Click the Save application button

  2. Copy the Application ID and Secret from this page; they will be used as arguments for the Moderne Agent:

Agent configuration

Step 2: Configure the Moderne Agent

The following table contains all of the variables/arguments you need to add to your Moderne agent run command in order for it to work with your GitLab instance. Please note that these variables/arguments must be combined with ones found in other steps in the Configuring the Moderne agent guide.

You can configure multiple GitLab OAuth apps by including multiple entries, each with a different {index}.

Environment variables:

Variable NameRequiredDefaultDescription
MODERNE_AGENT_GITLAB_{index}_OAUTH_CLIENTIDtrueThe application id configured in GitLab.
MODERNE_AGENT_GITLAB_{index}_OAUTH_CLIENTSECRETtrueThe secret configured in GitLab.
MODERNE_AGENT_GITLAB_{index}_URLtrueThe fully-qualified hostname of your GitLab instance.
MODERNE_AGENT_GITLAB_{index}_SKIPSSLfalsefalseSpecifies whether or not to skip SSL validation for HTTP connections to this GitLab instance. This must be set to true if you use a self-signed SSL/TLS certificate.
MODERNE_AGENT_GITLAB_{index}_SSH_PRIVATEKEYfalseThe SSH private key used to establish a SSH connection with GitLab.
MODERNE_AGENT_GITLAB_{index}_SSH_PASSPHRASEtrue (If the SSH private key is specified)The passphrase used to encrypt the SSH private key.
MODERNE_AGENT_GITLAB_{index}_SSH_SSHFILENAMEtrue (If the SSH private key is specified)The file name of the private key, which the agent will store locally.
MODERNE_AGENT_GITLAB_{index}_SSH_USERtrue (If the SSH private key is specified)The username used for SSH communication with GitLab.
MODERNE_AGENT_GITLAB_{index}_SSH_PORTfalse22The port used to communicate via SSH with GitLab.

Example:

docker run \
# ... Existing variables
-e MODERNE_AGENT_GITLAB_0_OAUTH_CLIENTID=yourClientId \
-e MODERNE_AGENT_GITLAB_0_OAUTH_CLIENTSECRET=yourClientSecret \
-e MODERNE_AGENT_GITLAB_0_URL=https://your-gitlab.com \
# ... Additional variables