GitLab n8n integrationAutomate GitLab with n8n.
Merge requests, pipelines and releases hold signal that your other tools never see. A GitLab n8n integration exposes 18 operations over 5 resources: files, issues, releases, repositories and users. The GitLab Trigger listens to 12 event types and fires within seconds.
Verified Trustpilot reviews · AI, automation & growth agency
Why build a GitLab n8n integration?
A GitLab n8n integration wires your repositories to everything that sits around them. The GitLab node calls the GitLab API for you, so a workflow can read a file, open an issue or cut a release without anyone opening the interface. The GitLab Trigger works the other way round: it registers a webhook, an n8n URL that GitLab calls the moment something happens in the project.
Start with release notes that write themselves. A tag lands, the trigger fires on tag_push, the node runs release.create with that tag and a description assembled upstream, and the announcement reaches Slack before anyone refreshes a page.
Next, issue triage that does not depend on someone watching the board. repository.getIssues pulls open issues each morning, filters them on a label, and drops the list into Google Sheets for the weekly review. Pair it with issue.edit and stale tickets get closed on a rule instead of a mood.
Then the repository as a config store. file.get reads a JSON file from the default branch, the workflow uses those values, and file.create writes the result back with a commit message that says where it came from. Teams that also mirror work to GitHub run the same shape on both platforms.
Reach for the HTTP Request node when an operation is missing. The GitLab node covers files, issues, releases, repositories and users. Anything else in the GitLab API still works: HTTP Request calls the endpoint directly and reuses the same GitLab credential through predefined authentication, so you do not manage a second token.
Two limits are worth knowing before you build. The release operations ask for a Project ID, the ID or URL encoded path of the project, while file and issue operations ask for Project Owner, so a single workflow mixes both conventions. And listings come back paginated: leave Return All off and n8n stops at Limit. If the platform choice is still open, the n8n review covers it, and the n8n training goes deeper on expressions.
How do you connect GitLab to n8n?
- 01
Create a GitLab access token
In GitLab, select your avatar, then Edit profile, then Access tokens in the left sidebar, then Add new token. Give it a Name such as
n8n integration, set an expiry date, and pick your Scopes. Theapiscope grants everything the node does in one go; narrower scopes work once you know which operations you actually run. - 02
Enter the credential in n8n
Open the Credentials menu in n8n and create a GitLab credential. Paste the token into Access Token, then fill GitLab Server with the URL of your instance, which matters when the team self hosts rather than using gitlab.com. A credential is created once and reused everywhere: the GitLab node and the GitLab Trigger both pick it from a dropdown.
- 03
Or register an OAuth2 application
OAuth2 is the recommended method. In GitLab, go to Edit profile, then Applications, then Add new application. Copy the OAuth Redirect URL that n8n shows into the GitLab Redirect URI field, tick the same Scopes, and save. GitLab returns an Application ID and a Secret, which become Client ID and Client Secret in n8n.
What GitLab events can start a workflow?
GitLab Trigger is the node that starts a workflow when something happens in GitLab. It listens to 12 events, listed below by family. Pick one or several, activate the workflow: n8n registers the webhook on your GitLab account.
What you see in n8n
Every event, by family
One row per object, one chip per action. The event to tick in the node is object.action; hover a chip to read exactly when it fires.
confidential_issues.*1confidential_issues. confidential_issues
confidential_note.*1confidential_note. confidential_note
deployment.*1deployment.deployment
issues.*1issues.issues
job.*1job.job
merge_requests.*1merge_requests. merge_requests
note.*1note.note
pipeline.*1pipeline.pipeline
push.*1push.push
releases.*1releases.releases
tag_push.*1tag_push. tag_push
wiki_page.*1wiki_page. wiki_page
The trigger also accepts * (any event). Handy for logging, dangerous in production.
Configuration notes
01Configure the GitLab Trigger
The trigger needs to know which project to watch and what to listen for. Nothing else.
Key parameters
- Repository Owner: the user, group or namespace the project belongs to.
- Repository Name: the name of the repository itself.
- Events: the list you tick. A wildcard entry,
*, subscribes to every event at once, which helps while you are still deciding what matters.
02Push, Tag and Merge Request events
These three carry the day to day movement of the code.
Key parameters
- Push (
push): fires when you push to the repository, except when the push is a tag. - Tag (
tag_push): fires when you create or delete tags, which is the clean hook for anything version shaped. - Merge Request (
merge_requests): fires when a merge request is created, updated, merged or closed, and also when a commit is added to the source branch.
issue.edit or posting a summary to the channel where the reviewers hang out. Because push stays quiet on tags, you can treat commits and versions with two separate workflows.03Pipeline, Job and Deployment events
The CI side of GitLab reports its own progress here.
Key parameters
- Pipeline (
pipeline): fires on a status change of a pipeline. - Job (
job): fires on a status change of a job, so one pipeline produces several of them. - Deployments (
deployment): fires when a deployment starts, succeeds, fails or is cancelled. - Release (
releases): fires when a release is created or updated.
pipeline, filter on the status in the payload, and send the failures where people already look. Keep job for the cases where you need the failing step by name, because it is noisier than the pipeline it belongs to. deployment is the one to pick when the question is environment shaped rather than build shaped, since it reports the cancellations too.04Issue, Comment and Wiki Page events
Everything humans write around the code has its own event.
Key parameters
- Issue (
issues): fires when an issue is created, updated, closed or reopened. - Comment (
note): fires on a new comment on commits, merge requests, issues and code snippets. - Confidential Issues and Confidential Comments (
confidential_issues,confidential_note): the same two signals for confidential content, kept separate on purpose. - Wiki Page (
wiki_page): fires when a wiki page is created, updated or deleted.
issues, because a new ticket is the start of a process that continues far outside GitLab. Subscribe to the confidential variants only when the workflow is allowed to handle that content, since they are not covered by the standard events. And wiki_page is the quiet one worth keeping: documentation that changes without anyone announcing it is how a runbook goes stale.What can the GitLab node do?
The GitLab node exposes 18 operations across 5 resources. For each one: the node as you configure it in n8n, the required fields, and our field notes.
| Resource | Create | Get | Get Many | Update | Delete | Create Comment | Edit | Get Issues | Get Repositories | List | Lock |
|---|---|---|---|---|---|---|---|---|---|---|---|
| File | ✓ | ✓ | ✓ | ✓ | ✓ | ||||||
| Issue | ✓ | ✓ | ✓ | ✓ | ✓ | ||||||
| Release | ✓ | ✓ | ✓ | ✓ | ✓ | ||||||
| Repository | ✓ | ✓ | |||||||||
| User | ✓ |
Operations index
File
5 operationsCreate a file
file.createWhat you see in n8n
Notes & use cases
Commits a new file into the repository, on the branch you name, exactly as a developer would.
Key parameters
- Project Owner: the user, group or namespace of the project, for example
n8n-io. - Binary File: off, n8n writes the text you put in File Content; on, it takes the file from Input Binary Field, the incoming binary field by name.
- Commit Message and Branch: the message recorded with the commit, and the branch that receives it.
- File Path: the full path such as
docs/README.md, or empty for the root folder.
Delete a file
file.deleteWhat you see in n8n
Notes & use cases
Removes a file and records the removal as a commit, so the history keeps the trace.
Key parameters
- File Path: the full path of the file to remove, or empty to target the root folder.
- Branch: the branch the deletion commit is added to.
- Commit Message: what the history will show, which is the only explanation a reviewer gets six months later.
- Project Owner: the user, group or namespace of the project.
Edit a file
file.editWhat you see in n8n
Notes & use cases
Replaces the content of a file that already exists and commits the new version.
Key parameters
- File Content: the new text, which overwrites the old one rather than appending to it.
- Binary File: switch it on to push the file from Input Binary Field instead of typed text.
- File Path, Branch and Commit Message: which file changes, where, and under what message.
- Project Owner: the user, group or namespace of the project.
Get a file
file.getWhat you see in n8n
Notes & use cases
Reads one file back out of the repository so the rest of the workflow can use its content.
Key parameters
- Put Output File in Field: the name of the output binary field n8n drops the file into.
- As Binary Property: on, you get a binary field; off, you get the raw API response instead.
- Reference, under Additional Parameters: the commit, branch or tag to read from, such as
main. Left empty, GitLab uses the default branch of the repository.
List files
file.listWhat you see in n8n
Notes & use cases
Lists what a folder of the repository contains, one item per entry found.
Key parameters
- File Path: the folder to list, empty for the root.
- Return All: on, n8n walks every page of results; off, it stops at Limit, and Page lets you fetch a specific page on its own.
- Recursive, under Additional Parameters: on, you get the whole tree below the path instead of one level.
- Reference: the commit, branch or tag to list from.
Issue
5 operationsCreate an issue
issue.createWhat you see in n8n
Notes & use cases
Opens a new issue in the project and returns it, number included, for the nodes that follow.
Key parameters
- Title: the title of the issue, the one required field beyond the project.
- Body: the description, often built from the incoming item with something like
{{ $json.message }}. - Due Date and Assignees: a deadline, and the people who own it.
- Label and Assignee, in the Labels collection: a label to add, and a user ID to assign the issue to.
Create a comment on an issue
issue.createCommentWhat you see in n8n
Notes & use cases
Adds a comment to an existing issue, which keeps the conversation where the team already reads it.
Key parameters
- Issue Number: the number of the issue receiving the comment, typically carried over as
{{ $json.iid }}from a previous node. - Body: the text of the comment itself.
- Project Owner: the user, group or namespace of the project.
Edit an issue
issue.editWhat you see in n8n
Notes & use cases
Updates an issue that already exists, changing only the fields you add to the collection.
Key parameters
- Issue Number: which issue gets edited.
- State, in Edit Fields:
closedoropen, which is how a workflow closes a ticket on its own. - Title, Body, Labels, Assignees and Due Date: everything else the collection lets you rewrite.
Get an issue
issue.getWhat you see in n8n
Notes & use cases
Fetches a single issue and returns its data, without changing anything in GitLab.
Key parameters
- Issue Number: the number of the issue to read.
- Project Owner: the user, group or namespace of the project.
Lock an issue
issue.lockWhat you see in n8n
Notes & use cases
Locks the discussion on an issue, so no new comment can be added to the thread.
Key parameters
- Issue Number: the issue to lock.
- Lock Reason: one of
off-topic,too heated,resolvedorspam, which records why the thread was frozen.
resolved, and the maintainers stop answering the same question.Release
5 operationsCreate a release
release.createWhat you see in n8n
Notes & use cases
Publishes a release on the project, attached to a tag, and returns it.
Key parameters
- Tag: the tag of the release, the only field required beyond the project.
- Ref, in Additional Fields: if the tag does not exist yet, GitLab creates the release from this reference, a commit SHA, another tag name or a branch name.
- Name and Description: the display name of the release and its notes.
Delete a release
release.deleteWhat you see in n8n
Notes & use cases
Deletes a release from the project. The Git tag itself is a separate object from the release.
Key parameters
- Project ID: the ID or the URL encoded path of the project, which the release operations use instead of a plain owner.
- Tag Name: the Git tag the release is associated with.
- Project Owner: the user, group or namespace of the project.
Get a release
release.getWhat you see in n8n
Notes & use cases
Returns one release, identified by its tag, with its data as GitLab stores it.
Key parameters
- Tag Name: the Git tag the release is associated with.
- Project ID: the ID or URL encoded path of the project.
- Project Owner: the user, group or namespace of the project.
Get many releases
release.getAllWhat you see in n8n
Notes & use cases
Returns the releases of a project as a list, one item per release.
Key parameters
- Return All: on, n8n pages through the full history; off, it stops at Limit.
- Order By, in Additional Fields:
created_atorreleased_at, which are not the same date when a release is prepared ahead of time. - Sort:
ascordescfor the direction.
Update a release
release.updateWhat you see in n8n
Notes & use cases
Edits a release that is already published, leaving the tag it points to untouched.
Key parameters
- Tag Name: which release gets updated.
- Description, in Additional Fields: the notes of the release, where Markdown is allowed.
- Milestones: the title of each milestone to associate, as a list of titles separated with a comma.
- Released At: the date the release is or was ready.
- Name: the release name.
Repository
2 operationsGet a repository
repository.getWhat you see in n8n
Notes & use cases
Returns the data of a single repository, and asks for nothing beyond the project itself.
Key parameters
- Project Owner: the user, group or namespace of the project, for instance
n8n-io.
Get issues of a repository
repository.getIssuesWhat you see in n8n
Notes & use cases
Returns the issues of a repository, filtered server side rather than in a later node.
Key parameters
- State, in Filters:
opened,closed, or empty for any state. - Labels, Assignee, Creator and Search: narrow by label list, by username, or against the title and description.
- Updated After: only issues touched at or after a date, which is how you build a daily digest.
- Return All and Limit: the whole list, or a capped one.
User
1 operationGet a user's repositories
user.getRepositoriesWhat you see in n8n
Notes & use cases
Returns the repositories belonging to a user, group or namespace, one item per repository.
Key parameters
- Project Owner: the user, group or namespace whose repositories you want, such as
n8n-io.
Need help automating GitLab with n8n?
A person reads every message.


