n8n 워크플로 자동 백업을 GitLab에 사용자명별로 구성
이것은DevOps분야의자동화 워크플로우로, 15개의 노드를 포함합니다.주로 If, N8n, Set, Wait, Gitlab 등의 노드를 사용하며. n8n 워크플로 자동 백업을 사용자명별로 GitLab에 구성
- •GitLab Personal Access Token
카테고리
{
"id": "5ZZy57tVLfqtQZfF",
"meta": {
"instanceId": "dd69efaf8212c74ad206700d104739d3329588a6f3f8381a46a481f34c9cc281",
"templateCredsSetupCompleted": true
},
"name": "Automated Backup of n8n Workflows to GitLab Organized by Username",
"tags": [],
"nodes": [
{
"id": "79975f6a-5aa3-4452-ba09-b489eb8c197e",
"name": "수동 백업 트리거",
"type": "n8n-nodes-base.manualTrigger",
"position": [
-820,
35
],
"parameters": {},
"typeVersion": 1
},
{
"id": "2d5d5165-ba45-410c-8c5a-37c142b24cc1",
"name": "주간 예약 백업",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-820,
235
],
"parameters": {
"rule": {
"interval": [
{
"field": "weeks",
"triggerAtDay": [
5
],
"triggerAtHour": 18
}
]
}
},
"notesInFlow": false,
"typeVersion": 1.2
},
{
"id": "6662cc05-fe42-4f80-a59a-ba670ed143f2",
"name": "N8N 워크플로우 가져오기",
"type": "n8n-nodes-base.n8n",
"position": [
-600,
135
],
"parameters": {
"filters": {},
"requestOptions": {}
},
"credentials": {
"n8nApi": {
"id": "IAN18QKBV0noRrm4",
"name": "n8n account - test"
}
},
"typeVersion": 1
},
{
"id": "08d1c5cc-725b-4c9b-a7e4-55df5cd74a27",
"name": "백업 메타데이터 준비",
"type": "n8n-nodes-base.set",
"position": [
-380,
135
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "backup-date",
"name": "backupDate",
"type": "string",
"value": "={{ $now.setZone('UTC').toFormat('yyyy-MM-dd') }}"
},
{
"id": "backup-path",
"name": "backupPath",
"type": "string",
"value": "=backups/{{ $now.setZone('UTC').toFormat('yyyy') }}/{{ $now.setZone('UTC').toFormat('MM') }}"
}
]
},
"includeOtherFields": true
},
"typeVersion": 3.3
},
{
"id": "cbae944a-2622-4ae7-99c1-56efc56d07cf",
"name": "각 워크플로우 처리",
"type": "n8n-nodes-base.splitInBatches",
"position": [
-160,
135
],
"parameters": {
"options": {}
},
"typeVersion": 3
},
{
"id": "693af3e9-5e9c-44c6-84a3-9a7c7dcca189",
"name": "GitLab 형식으로 워크플로우 포맷팅",
"type": "n8n-nodes-base.set",
"position": [
60,
-140
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "workflow-data",
"name": "workflowData",
"type": "object",
"value": "={{\n {\n \"id\": $json.id,\n \"name\": $json.name,\n \"active\": $json.active,\n \"nodes\": $json.nodes,\n \"connections\": $json.connections,\n \"settings\": $json.settings,\n \"staticData\": $json.staticData,\n \"tags\": $json.tags,\n \"versionId\": $json.versionId,\n \"triggerCount\": $json.triggerCount,\n \"createdAt\": $json.createdAt,\n \"updatedAt\": $json.updatedAt\n }\n}}"
},
{
"id": "creator-name",
"name": "creatorName",
"type": "string",
"value": "={{ $json.name.toLowerCase().includes('vrushti') ? 'vrushti' : $json.name.toLowerCase().includes('poojan') ? 'poojan' : $json.name.toLowerCase().includes('pragnesh') ? 'pragnesh' : $json.name.toLowerCase().includes('ajay') ? 'ajay' : 'general' }}"
},
{
"id": "file-name",
"name": "fileName",
"type": "string",
"value": "={{ $json.name.replace(/[^a-zA-Z0-9\\-_]/g, '_').replace(/_+/g, '_').replace(/^_|_$/g, '') }}.json"
},
{
"id": "file-path",
"name": "filePath",
"type": "string",
"value": "=n8n-workflows/{{ $json.name.toLowerCase().includes('vrushti') ? 'vrushti' : $json.name.toLowerCase().includes('poojan') ? 'poojan' : $json.name.toLowerCase().includes('pragnesh') ? 'pragnesh' : $json.name.toLowerCase().includes('ajay') ? 'ajay' : 'general' }}/{{ $json.name.replace(/[^a-zA-Z0-9\\-_]/g, '_').replace(/_+/g, '_').replace(/^_|_$/g, '') }}.json"
}
]
},
"includeOtherFields": true
},
"typeVersion": 3.3
},
{
"id": "dea22b1e-e1b3-4440-b757-ba70339950de",
"name": "속도 제어",
"type": "n8n-nodes-base.wait",
"position": [
280,
-140
],
"webhookId": "c06823b0-4637-4e20-9c10-e020b3a74649",
"parameters": {
"amount": 2
},
"typeVersion": 1.1
},
{
"id": "419a3294-fe3c-41e8-a863-3b9143c8fbba",
"name": "백업 상태 확인",
"type": "n8n-nodes-base.if",
"position": [
720,
-140
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "6edbebb3-1dc9-4e70-bd4b-0c02e6574808",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.error }}",
"rightValue": "Bad request - please check your parameters"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "bf9ad468-20ad-412a-aceb-034e06795780",
"name": "백업 결과 기록",
"type": "n8n-nodes-base.set",
"position": [
60,
60
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "error-log",
"name": "errorLog",
"type": "string",
"value": "=Failed to process {{ $json.fileName }}: {{ $json.error?.message || 'Unknown error' }}"
},
{
"id": "success-log",
"name": "successLog",
"type": "string",
"value": "=Successfully processed {{ $json.fileName }} for {{ $json.creatorName }}"
}
]
},
"includeOtherFields": true
},
"typeVersion": 3.3
},
{
"id": "7d67c031-8c4a-409b-9c7e-69775b28abf1",
"name": "백업 요약 업데이트",
"type": "n8n-nodes-base.gitlab",
"position": [
940,
35
],
"parameters": {
"owner": "gitlab-user",
"branch": "main",
"filePath": "={{ $('Rate Limit Control').item.json.filePath }}",
"resource": "file",
"operation": "edit",
"repository": "n8n-backup",
"fileContent": "={{ JSON.stringify( $('Rate Limit Control').item.json.workflowData, null, 2) }}",
"commitMessage": "=Update {{ $('Rate Limit Control').item.json.fileName }} in {{ $('Rate Limit Control').item.json.creatorName }} folder via n8n automation"
},
"credentials": {
"gitlabApi": {
"id": "F4ZDDauIbw2lHATd",
"name": "GitLab account - test "
}
},
"typeVersion": 1,
"continueOnFail": true
},
{
"id": "52424bd4-cbce-44a9-ab17-ddf1a910a5b9",
"name": "이메일 전송",
"type": "n8n-nodes-base.emailSend",
"position": [
280,
60
],
"webhookId": "c2139c63-5ead-4606-b54f-1d94f77d1b20",
"parameters": {
"text": "Hello,\n\nThe scheduled backup of all n8n workflows has been completed successfully.\n\nAll workflows have been committed to the GitLab repository without any errors.\n\nRegards,\nn8n Automation Bot",
"options": {},
"subject": "n8n workflows backup notification",
"toEmail": "abc.gmail.com",
"fromEmail": "xyz@gmail.com",
"emailFormat": "text"
},
"credentials": {
"smtp": {
"id": "G1kyF8cSWTZ4vouN",
"name": "SMTP -test"
}
},
"typeVersion": 2.1
},
{
"id": "5447ade3-d338-4341-ac86-36e1c1379f5f",
"name": "GitLab 저장소에 생성",
"type": "n8n-nodes-base.gitlab",
"position": [
500,
-140
],
"parameters": {
"owner": "gitlab-user",
"branch": "main",
"filePath": "={{ $json.filePath }}",
"resource": "file",
"repository": "n8n-backup",
"fileContent": "={{ JSON.stringify($json.workflowData, null, 2) }}",
"commitMessage": "=Add {{ $json.fileName }} - {{ $json.creatorName }} folder via n8n automation"
},
"credentials": {
"gitlabApi": {
"id": "F4ZDDauIbw2lHATd",
"name": "GitLab account - test "
}
},
"typeVersion": 1,
"continueOnFail": true
},
{
"id": "bf1d778c-2363-46da-8197-2fc673b0b258",
"name": "스티커 노트",
"type": "n8n-nodes-base.stickyNote",
"position": [
-900,
-160
],
"parameters": {
"height": 560,
"content": "## Backup Initiation: \n\nTriggers manually or weekly to start the process "
},
"typeVersion": 1
},
{
"id": "742d27cd-19e4-46d5-bffb-0bac0d101a58",
"name": "스티커 노트1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-630,
-265
],
"parameters": {
"color": 3,
"width": 380,
"height": 560,
"content": "## Workflow Retrieval & Prep: \n\nFetches workflows and prepares metadata"
},
"typeVersion": 1
},
{
"id": "8c5e0911-391d-44ca-871b-8d6e20e65939",
"name": "스티커 노트2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-230,
-265
],
"parameters": {
"color": 6,
"width": 1340,
"height": 560,
"content": "## Combined Processing, Storage, and Notification: \n\nProcesses and formats workflows, saves them to GitLab with file existence checks and updates user-wise, logs results, and sends a success email."
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "53da3fbb-7cb8-467b-bac5-c82a414b0096",
"connections": {
"bf9ad468-20ad-412a-aceb-034e06795780": {
"main": [
[
{
"node": "52424bd4-cbce-44a9-ab17-ddf1a910a5b9",
"type": "main",
"index": 0
}
]
]
},
"dea22b1e-e1b3-4440-b757-ba70339950de": {
"main": [
[
{
"node": "5447ade3-d338-4341-ac86-36e1c1379f5f",
"type": "main",
"index": 0
}
]
]
},
"419a3294-fe3c-41e8-a863-3b9143c8fbba": {
"main": [
[
{
"node": "7d67c031-8c4a-409b-9c7e-69775b28abf1",
"type": "main",
"index": 0
}
],
[
{
"node": "cbae944a-2622-4ae7-99c1-56efc56d07cf",
"type": "main",
"index": 0
}
]
]
},
"6662cc05-fe42-4f80-a59a-ba670ed143f2": {
"main": [
[
{
"node": "08d1c5cc-725b-4c9b-a7e4-55df5cd74a27",
"type": "main",
"index": 0
}
]
]
},
"79975f6a-5aa3-4452-ba09-b489eb8c197e": {
"main": [
[
{
"node": "6662cc05-fe42-4f80-a59a-ba670ed143f2",
"type": "main",
"index": 0
}
]
]
},
"cbae944a-2622-4ae7-99c1-56efc56d07cf": {
"main": [
[
{
"node": "bf9ad468-20ad-412a-aceb-034e06795780",
"type": "main",
"index": 0
}
],
[
{
"node": "693af3e9-5e9c-44c6-84a3-9a7c7dcca189",
"type": "main",
"index": 0
}
]
]
},
"7d67c031-8c4a-409b-9c7e-69775b28abf1": {
"main": [
[
{
"node": "cbae944a-2622-4ae7-99c1-56efc56d07cf",
"type": "main",
"index": 0
}
]
]
},
"08d1c5cc-725b-4c9b-a7e4-55df5cd74a27": {
"main": [
[
{
"node": "cbae944a-2622-4ae7-99c1-56efc56d07cf",
"type": "main",
"index": 0
}
]
]
},
"2d5d5165-ba45-410c-8c5a-37c142b24cc1": {
"main": [
[
{
"node": "6662cc05-fe42-4f80-a59a-ba670ed143f2",
"type": "main",
"index": 0
}
]
]
},
"693af3e9-5e9c-44c6-84a3-9a7c7dcca189": {
"main": [
[
{
"node": "dea22b1e-e1b3-4440-b757-ba70339950de",
"type": "main",
"index": 0
}
]
]
},
"5447ade3-d338-4341-ac86-36e1c1379f5f": {
"main": [
[
{
"node": "419a3294-fe3c-41e8-a863-3b9143c8fbba",
"type": "main",
"index": 0
}
]
]
}
}
}이 워크플로우를 어떻게 사용하나요?
위의 JSON 구성 코드를 복사하여 n8n 인스턴스에서 새 워크플로우를 생성하고 "JSON에서 가져오기"를 선택한 후, 구성을 붙여넣고 필요에 따라 인증 설정을 수정하세요.
이 워크플로우는 어떤 시나리오에 적합한가요?
중급 - 데브옵스
유료인가요?
이 워크플로우는 완전히 무료이며 직접 가져와 사용할 수 있습니다. 다만, 워크플로우에서 사용하는 타사 서비스(예: OpenAI API)는 사용자 직접 비용을 지불해야 할 수 있습니다.
관련 워크플로우 추천
Oneclick AI Squad
@oneclick-aiThe AI Squad Initiative is a pioneering effort to build, automate and scale AI-powered workflows using n8n.io. Our mission is to help individuals and businesses integrate AI agents seamlessly into their daily operations from automating tasks and enhancing productivity to creating innovative, intelligent solutions. We design modular, reusable AI workflow templates that empower creators, developers and teams to supercharge their automation with minimal effort and maximum impact.
이 워크플로우 공유