n8n과 API를 사용한 GitLab 병합 요청 자동화
중급
이것은Engineering, DevOps, IT Ops분야의자동화 워크플로우로, 10개의 노드를 포함합니다.주로 If, Set, Wait, HttpRequest, SplitInBatches 등의 노드를 사용하며. n8n와 API를 사용한 GitLab 병합 요청 자동화
사전 요구사항
- •대상 API의 인증 정보가 필요할 수 있음
워크플로우 미리보기
노드 연결 관계를 시각적으로 표시하며, 확대/축소 및 이동을 지원합니다
워크플로우 내보내기
다음 JSON 구성을 복사하여 n8n에 가져오면 이 워크플로우를 사용할 수 있습니다
{
"meta": {
"templateCredsSetupCompleted": true
},
"nodes": [
{
"id": "b9a807c3-5847-477a-a242-2fdf5b15ba7e",
"name": "API를 사용하여 기존 병합 요청 확인",
"type": "n8n-nodes-base.httpRequest",
"position": [
-840,
-20
],
"parameters": {
"url": "=https://gitlab.com/<projectid>/merge_requests",
"options": {
"allowUnauthorizedCerts": false
},
"sendQuery": true,
"sendHeaders": true,
"queryParameters": {
"parameters": [
{
"name": "state",
"value": "opened"
},
{
"name": "source_branch",
"value": "=sourceBranchName"
}
]
},
"headerParameters": {
"parameters": [
{
"name": "PRIVATE-TOKEN",
"value": "=gitlabToken"
}
]
}
},
"typeVersion": 4.2,
"alwaysOutputData": true
},
{
"id": "42270a5a-d696-44f3-b2f5-16b2ddb3488c",
"name": "존재 여부 확인",
"type": "n8n-nodes-base.if",
"position": [
-660,
-20
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "d895b8cc-5679-442f-a1bf-d8375174a24b",
"operator": {
"type": "boolean",
"operation": "true",
"singleValue": true
},
"leftValue": "={{ $node[\"API to Check existing merge request\"].data.isEmpty() }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
},
{
"id": "d380c943-0525-4976-9e70-c90de1177f0c",
"name": "새 병합 요청 생성",
"type": "n8n-nodes-base.httpRequest",
"position": [
-440,
-200
],
"parameters": {
"url": "=https://gitlab.com/<projectid>/merge_requests",
"method": "POST",
"options": {
"allowUnauthorizedCerts": false
},
"sendBody": true,
"contentType": "form-urlencoded",
"sendHeaders": true,
"bodyParameters": {
"parameters": [
{
"name": "source_branch",
"value": "=sourceBranchName"
},
{
"name": "target_branch",
"value": "=targetBranchName"
},
{
"name": "title",
"value": "=mergeTitle"
}
]
},
"headerParameters": {
"parameters": [
{
"name": "PRIVATE-TOKEN",
"value": "=gitlabToken"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "600a0ed5-cb68-4479-8aee-55b55f0d8630",
"name": "항목 반복 처리",
"type": "n8n-nodes-base.splitInBatches",
"position": [
-440,
160
],
"parameters": {
"options": {}
},
"typeVersion": 3
},
{
"id": "555643cb-761c-41ec-b983-8e0194851a8d",
"name": "API를 사용하여 기존 병합 요청 닫기",
"type": "n8n-nodes-base.httpRequest",
"position": [
-220,
180
],
"parameters": {
"url": "=https://gitlab.com/<projectid>/merge_requests/<merge_iid>",
"method": "PUT",
"options": {
"allowUnauthorizedCerts": false
},
"sendBody": true,
"contentType": "form-urlencoded",
"sendHeaders": true,
"bodyParameters": {
"parameters": [
{
"name": "state_event",
"value": "close"
}
]
},
"headerParameters": {
"parameters": [
{
"name": "PRIVATE-TOKEN",
"value": "=gitlabToken"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "0c94b06a-80e3-4e50-8bac-2bd4015f085e",
"name": "병합 요청에 사용자 정의 메모 추가",
"type": "n8n-nodes-base.httpRequest",
"position": [
-220,
-200
],
"parameters": {
"url": "=https://gitlab.com/<projectid>/merge_requests/<merge_iid>/notes",
"method": "POST",
"options": {
"allowUnauthorizedCerts": false
},
"sendBody": true,
"contentType": "form-urlencoded",
"sendHeaders": true,
"bodyParameters": {
"parameters": [
{
"name": "body",
"value": "=<mergeComments>"
}
]
},
"headerParameters": {
"parameters": [
{
"name": "PRIVATE-TOKEN",
"value": "=gitlabToken"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "8e849f4f-2a52-46ba-9e0a-17126a8d966c",
"name": "병합 요청 승인 및 파이프라인 완료를 위한 30초 대기",
"type": "n8n-nodes-base.wait",
"position": [
140,
-200
],
"webhookId": "ac7bb2de-2c6f-479a-8807-13a29d8eaf5e",
"parameters": {
"amount": 30
},
"typeVersion": 1.1
},
{
"id": "05cca829-b2df-4c1e-9441-56349acc4a0d",
"name": "파이프라인 성공 시 병합",
"type": "n8n-nodes-base.httpRequest",
"position": [
720,
-200
],
"parameters": {
"url": "=https://gitlab.com/<projectid>/merge_requests/<merge_iid>/merge",
"method": "PUT",
"options": {
"allowUnauthorizedCerts": false
},
"jsonBody": "={\n\"merge_when_pipeline_succeeds\": {{ $('setValueForMerge').item.json.merge_when_pipeline_succeeds }},\n \"should_remove_source_branch\": {{ $('setValueForMerge').item.json.should_remove_source_branch }}\n}",
"sendBody": true,
"sendHeaders": true,
"specifyBody": "json",
"headerParameters": {
"parameters": [
{
"name": "PRIVATE-TOKEN",
"value": "=gitlabToken"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "e3ce9cdc-5484-4b4b-8701-6b9089a1f76d",
"name": "병합을 위한 값 설정",
"type": "n8n-nodes-base.set",
"position": [
460,
-200
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "a22922c7-0c69-4ac1-bd15-4d289fa57737",
"name": "merge_when_pipeline_succeeds",
"type": "boolean",
"value": false
},
{
"id": "17580668-84d9-4ad6-b93b-e7b6c9c0f8ea",
"name": "should_remove_source_branch",
"type": "boolean",
"value": true
}
]
}
},
"typeVersion": 3.4
},
{
"id": "0d49ec98-4806-492e-a6c2-a298ed8bb11a",
"name": "스케줄 트리거",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-1160,
-20
],
"parameters": {
"rule": {
"interval": [
{}
]
}
},
"typeVersion": 1.2
}
],
"pinData": {},
"connections": {
"42270a5a-d696-44f3-b2f5-16b2ddb3488c": {
"main": [
[
{
"node": "d380c943-0525-4976-9e70-c90de1177f0c",
"type": "main",
"index": 0
}
],
[
{
"node": "600a0ed5-cb68-4479-8aee-55b55f0d8630",
"type": "main",
"index": 0
}
]
]
},
"600a0ed5-cb68-4479-8aee-55b55f0d8630": {
"main": [
[
{
"node": "b9a807c3-5847-477a-a242-2fdf5b15ba7e",
"type": "main",
"index": 0
}
],
[
{
"node": "555643cb-761c-41ec-b983-8e0194851a8d",
"type": "main",
"index": 0
}
]
]
},
"0d49ec98-4806-492e-a6c2-a298ed8bb11a": {
"main": [
[
{
"node": "b9a807c3-5847-477a-a242-2fdf5b15ba7e",
"type": "main",
"index": 0
}
]
]
},
"e3ce9cdc-5484-4b4b-8701-6b9089a1f76d": {
"main": [
[
{
"node": "05cca829-b2df-4c1e-9441-56349acc4a0d",
"type": "main",
"index": 0
}
]
]
},
"d380c943-0525-4976-9e70-c90de1177f0c": {
"main": [
[
{
"node": "0c94b06a-80e3-4e50-8bac-2bd4015f085e",
"type": "main",
"index": 0
}
]
]
},
"0c94b06a-80e3-4e50-8bac-2bd4015f085e": {
"main": [
[
{
"node": "8e849f4f-2a52-46ba-9e0a-17126a8d966c",
"type": "main",
"index": 0
}
]
]
},
"555643cb-761c-41ec-b983-8e0194851a8d": {
"main": [
[
{
"node": "600a0ed5-cb68-4479-8aee-55b55f0d8630",
"type": "main",
"index": 0
}
]
]
},
"b9a807c3-5847-477a-a242-2fdf5b15ba7e": {
"main": [
[
{
"node": "42270a5a-d696-44f3-b2f5-16b2ddb3488c",
"type": "main",
"index": 0
}
]
]
},
"8e849f4f-2a52-46ba-9e0a-17126a8d966c": {
"main": [
[
{
"node": "e3ce9cdc-5484-4b4b-8701-6b9089a1f76d",
"type": "main",
"index": 0
}
]
]
}
}
}자주 묻는 질문
이 워크플로우를 어떻게 사용하나요?
위의 JSON 구성 코드를 복사하여 n8n 인스턴스에서 새 워크플로우를 생성하고 "JSON에서 가져오기"를 선택한 후, 구성을 붙여넣고 필요에 따라 인증 설정을 수정하세요.
이 워크플로우는 어떤 시나리오에 적합한가요?
중급 - 엔지니어링, 데브옵스, IT 운영
유료인가요?
이 워크플로우는 완전히 무료이며 직접 가져와 사용할 수 있습니다. 다만, 워크플로우에서 사용하는 타사 서비스(예: OpenAI API)는 사용자 직접 비용을 지불해야 할 수 있습니다.
관련 워크플로우 추천
모든 Scaleway 서버 정보 복사본 가져오기
동적 필터를 사용하여 Scaleway 서버 정보를 가져옵니다.
If
Set
Code
+
If
Set
Code
24 노드Pablo
엔지니어링
AI 스마트 어시스턴트: Supabase 스토리지 및 Google Drive 파일과 대화
AI스마트어시스턴트:与Supabase存储및Google Drive文件对话
If
Set
Wait
+
If
Set
Wait
62 노드Mark Shcherbakov
엔지니어링
Supabase 스토리지 내 파일과 대화하는 AI 에이전트
与Supabase存储中文件对话의AI스마트体
If
Merge
Switch
+
If
Merge
Switch
33 노드Mark Shcherbakov
엔지니어링
Docker 레지스터리 정리 워크플로우
Docker 레지스터리 클리닝 워크플로우
Set
Ssh
Code
+
Set
Ssh
Code
16 노드Muzaffer AKYIL
엔지니어링
Airtable 전체 백업
Airtable데이터库백업로S3
If
Set
Aws S3
+
If
Set
Aws S3
19 노드Autonomous Work
엔지니어링
n8n 업데이트
Telegram 승인 시스템을 사용한 Docker 컨테이너 업데이트 자동화
If
Set
Ssh
+
If
Set
Ssh
27 노드Jaber Zare
데브옵스