매일 워크플로우 백업을 GitLab에 저장并发송 Slack 알림
고급
이것은자동화 워크플로우로, 22개의 노드를 포함합니다.주로 If, N8n, Set, Code, Slack 등의 노드를 사용하며. 매일 워크플로우 백업을 GitLab에 저장하고 Slack 알림 전송
사전 요구사항
- •Slack Bot Token 또는 Webhook URL
- •GitLab Personal Access Token
사용된 노드 (22)
카테고리
-
워크플로우 미리보기
노드 연결 관계를 시각적으로 표시하며, 확대/축소 및 이동을 지원합니다
워크플로우 내보내기
다음 JSON 구성을 복사하여 n8n에 가져오면 이 워크플로우를 사용할 수 있습니다
{
"meta": {
"instanceId": "cfcdd4aa7acb600106c0a4bff4e6959e8e3b32b3b8cbc7d93531b2a4c9012a32"
},
"nodes": [
{
"id": "05ee377d-5402-46ee-81b4-c56e6115ecd4",
"name": "모든 워크플로우 가져오기",
"type": "n8n-nodes-base.n8n",
"position": [
-496,
16
],
"parameters": {
"filters": {},
"requestOptions": {}
},
"credentials": {
"n8nApi": {
"id": "L1VsfzLKd4G6IpiP",
"name": "backup-internal"
}
},
"typeVersion": 1
},
{
"id": "f107d96b-26cf-47ad-97fc-83f64c7b621e",
"name": "보관된 워크플로우 제외",
"type": "n8n-nodes-base.filter",
"position": [
-336,
16
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "3d21f751-35bf-439c-8536-ff5e8968672e",
"operator": {
"type": "boolean",
"operation": "false",
"singleValue": true
},
"leftValue": "={{ $json.isArchived }}",
"rightValue": "true"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "67333676-710a-4721-82a4-f9288366c6d0",
"name": "파일로 변환",
"type": "n8n-nodes-base.convertToFile",
"position": [
240,
112
],
"parameters": {
"mode": "each",
"options": {
"format": true
},
"operation": "toJson"
},
"typeVersion": 1.1
},
{
"id": "2d508a48-be41-40cd-be68-2aad83038cce",
"name": "파일 존재 여부 확인",
"type": "n8n-nodes-base.if",
"position": [
400,
112
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "9798deb6-300a-48ff-9f5c-a581b2d941a7",
"operator": {
"type": "array",
"operation": "contains",
"rightType": "any"
},
"leftValue": "={{ $('List of Names').item.json.name }}",
"rightValue": "={{ $('Process Each File').item.json.name }}"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "b816f0b9-26b1-438d-877a-d1d4ad86fe89",
"name": "설정",
"type": "n8n-nodes-base.set",
"position": [
-992,
16
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "558377f5-54a6-4dd2-872a-dd1fa8f1fc9f",
"name": "project_owner",
"type": "string",
"value": "PROJECT_OWNER e.g. mookielian"
},
{
"id": "063bbfbf-697e-4825-8c68-af5cc7b6aa2d",
"name": "project_name",
"type": "string",
"value": "PROJECT_NAME e.g. n8n"
},
{
"id": "7938d2e2-b203-45fc-8432-f9f3ac241946",
"name": "branch",
"type": "string",
"value": "main"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "517ef436-5323-4ffc-8ead-5c303930987e",
"name": "이름 목록",
"type": "n8n-nodes-base.aggregate",
"position": [
-656,
16
],
"parameters": {
"options": {},
"fieldsToAggregate": {
"fieldToAggregate": [
{
"fieldToAggregate": "name"
}
]
}
},
"typeVersion": 1
},
{
"id": "5befe173-4171-4107-be94-4c5ad235ca76",
"name": "새 파일 생성 - GitLab",
"type": "n8n-nodes-base.gitlab",
"onError": "continueErrorOutput",
"position": [
560,
192
],
"parameters": {
"owner": "={{ $('Configuration').item.json.project_owner }}",
"branch": "={{ $('Configuration').item.json.branch }}",
"filePath": "={{ $('Process Each File').item.json.name }}",
"resource": "file",
"binaryData": true,
"repository": "={{ $('Configuration').item.json.project_name }}",
"commitMessage": "=File created! {{ $('Process Each File').item.json.name }}"
},
"credentials": {
"gitlabApi": {
"id": "CV2TdcFVqfePX5QH",
"name": "GitLab Account"
}
},
"typeVersion": 1
},
{
"id": "20270a8c-ac47-4449-a506-618fe2362e17",
"name": "파일 업데이트 - GitLab",
"type": "n8n-nodes-base.gitlab",
"onError": "continueErrorOutput",
"position": [
560,
0
],
"parameters": {
"owner": "={{ $('Configuration').item.json.project_owner }}",
"branch": "={{ $('Configuration').item.json.branch }}",
"filePath": "={{ $('Process Each File').item.json.name }}",
"resource": "file",
"operation": "edit",
"binaryData": true,
"repository": "={{ $('Configuration').item.json.project_name }}",
"commitMessage": "=File was updated! {{ $('Process Each File').item.json.name }}"
},
"credentials": {
"gitlabApi": {
"id": "CV2TdcFVqfePX5QH",
"name": "GitLab Account"
}
},
"typeVersion": 1
},
{
"id": "62bc4120-f641-456d-ae3c-2d450941ebe6",
"name": "모든 파일 목록 - GitLab",
"type": "n8n-nodes-base.gitlab",
"position": [
-832,
16
],
"parameters": {
"owner": "={{ $('Configuration').item.json.project_owner }}",
"resource": "file",
"operation": "list",
"returnAll": true,
"repository": "={{ $('Configuration').item.json.project_name }}",
"additionalParameters": {}
},
"credentials": {
"gitlabApi": {
"id": "CV2TdcFVqfePX5QH",
"name": "GitLab Account"
}
},
"typeVersion": 1
},
{
"id": "2e8a6259-5530-4e15-babf-febbad2095ac",
"name": "일일 트리거",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-1136,
16
],
"parameters": {
"rule": {
"interval": [
{
"triggerAtHour": 12
}
]
}
},
"typeVersion": 1.2
},
{
"id": "de6637b3-1a90-4683-b785-ee168de26cbe",
"name": "각 파일 처리",
"type": "n8n-nodes-base.splitInBatches",
"position": [
-144,
16
],
"parameters": {
"options": {}
},
"typeVersion": 3
},
{
"id": "17b4693e-d52c-4f1a-97fa-2c42da170df3",
"name": "불필요 필드 제거",
"type": "n8n-nodes-base.code",
"position": [
64,
112
],
"parameters": {
"jsCode": "return $input.all().map(item => {\n const { createdAt, updatedAt, id, name, active, isArchived, ...rest } = item.json;\n return { json: rest };\n});"
},
"typeVersion": 2
},
{
"id": "d96386b2-75df-49c1-9645-f50a96c92d23",
"name": "채널에 메시지 전송",
"type": "n8n-nodes-base.slack",
"position": [
64,
-80
],
"webhookId": "7204c9cc-0e71-46ce-9760-3c49075bc472",
"parameters": {
"text": "=*Successful Backup!*\n\n- Execution ID: {{ $execution.id }}\n- Mode: {{ $execution.mode }}\n- Timestamp(Workflow Region): {{$now.toFormat('yyyy-MM-dd HH:mm:ss')}}",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "list",
"value": "C09KF70UXL3",
"cachedResultName": "backup-notifications"
},
"otherOptions": {
"includeLinkToWorkflow": false
}
},
"credentials": {
"slackApi": {
"id": "jkWLdvbGqIn5uLSh",
"name": "n8n-backup-bot-v2"
}
},
"executeOnce": true,
"typeVersion": 2.3
},
{
"id": "25cc4169-c68e-4ed8-a85c-43e432cf5dbf",
"name": "새 파일 생성 실패",
"type": "n8n-nodes-base.slack",
"position": [
752,
208
],
"webhookId": "5354db33-36b0-4f5b-ba5e-4d902660a1dd",
"parameters": {
"text": "=*Failed creating a new file - GitLab.*\n\n- File Name: {{ $('Process Each File').item.json.name }}\n- Error: {{ $json.error }}\n- Workflow State: _active={{ $('Process Each File').item.json.active }}_\n- Execution ID: {{ $execution.id }}\n- Mode: {{ $execution.mode }}\n- Timestamp(Workflow Region): {{$now.toFormat('yyyy-MM-dd HH:mm:ss')}}",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "list",
"value": "C09KF70UXL3",
"cachedResultName": "backup-notifications"
},
"otherOptions": {}
},
"credentials": {
"slackApi": {
"id": "jkWLdvbGqIn5uLSh",
"name": "n8n-backup-bot-v2"
}
},
"typeVersion": 2.3
},
{
"id": "2a2bad0d-af10-494b-aa21-48c2b1f277c3",
"name": "파일 업데이트 실패",
"type": "n8n-nodes-base.slack",
"position": [
752,
16
],
"webhookId": "5354db33-36b0-4f5b-ba5e-4d902660a1dd",
"parameters": {
"text": "=*Failed updating specified file - GitLab.*\n\n- File Name: {{ $('Process Each File').item.json.name }}\n- Error: {{ $json.error }}\n- Workflow State: _active={{ $('Process Each File').item.json.active }}_\n- Execution ID: {{ $execution.id }}\n- Mode: {{ $execution.mode }}\n- Timestamp(Workflow Region): {{$now.toFormat('yyyy-MM-dd HH:mm:ss')}}",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "list",
"value": "C09KF70UXL3",
"cachedResultName": "backup-notifications"
},
"otherOptions": {}
},
"credentials": {
"slackApi": {
"id": "jkWLdvbGqIn5uLSh",
"name": "n8n-backup-bot-v2"
}
},
"typeVersion": 2.3
},
{
"id": "48ea9738-ef97-452b-b6ce-10db70d0920c",
"name": "스티커 메모",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1856,
-240
],
"parameters": {
"color": 4,
"width": 400,
"height": 704,
"content": "# Welcome\n\n## Summary of Nodes\n\n- Daily Trigger (Customizable)\n- Conf. (GitLab)\n- List All Files (Necessary for comparison)\n- List of Names (Turns all names into an array of single field)\n- Get All Workflows (JSON of all workflows, base code)\n- Discard Archived Workflows (Toggle of if you want to backup archived too)\n- Process Each File (Loop to execute nodes for each workflow)\n - Remove Unwanted Fields (Returns clean node code of the workflow)\n - Convert to File (Turns JSON code into a formatted file ready for upload)\n - If File Exists (Route into two path, Update or Create in GitLab)\n - Update File - GitLab (Updates existing file, no update if the file is the same)\n - Update File - Failed (Informs you on Slack about the file that failed)\n - Create New File - GitLab (Push new file to repo.)\n - New File - Failed (Informs you about failed file creation)\n- Send Message to Channel (Done branch of loop, success message)\n"
},
"typeVersion": 1
},
{
"id": "bbaad52a-b34c-4b43-aad2-cf187bf7c6be",
"name": "스티커 메모1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1440,
-240
],
"parameters": {
"color": 5,
"width": 2608,
"height": 704,
"content": ""
},
"typeVersion": 1
},
{
"id": "a5eabdaa-c744-4272-868a-7a60740278b9",
"name": "스티커 메모2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1856,
480
],
"parameters": {
"color": 6,
"width": 3024,
"height": 336,
"content": "# CREDENTIALS"
},
"typeVersion": 1
},
{
"id": "cdcf207f-0efd-4124-95b3-3d6a329e14c2",
"name": "스티커 메모3",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1840,
576
],
"parameters": {
"width": 496,
"height": 176,
"content": "## Configuration Node\n\n- Create a project in GitLab.\n- Type the owner of the project as 'project_owner'.\n- Type the name of the project as 'project_name'.\n- Type the branch name. Will create a branch if main doesn't exist."
},
"typeVersion": 1
},
{
"id": "45f50d44-40c7-4e04-9e7f-36ee2cc075d4",
"name": "스티커 메모4",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1328,
576
],
"parameters": {
"width": 480,
"height": 176,
"content": "## GitLab - [Docs](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.gitlab/)\n\n- Enter your project settings on GitLab Dashboard.\n- Go to access tokens page and create a new token.\n- Paste in your token in n8n credential and save.\n- No need to change the GitLab server parameter."
},
"typeVersion": 1
},
{
"id": "819a6463-8222-47e9-aca2-36e4f20e0489",
"name": "스티커 메모5",
"type": "n8n-nodes-base.stickyNote",
"position": [
-832,
576
],
"parameters": {
"width": 496,
"height": 176,
"content": "## n8n Internal - [Docs](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.n8n/)\n\n- From left menu and bottom go to your user settings.\n- Go to API Keys page and create a new key.\n- Paste in the API Key in the credential page.\n- As base URL, enter your domain with '/api/v1' at the end and save."
},
"typeVersion": 1
},
{
"id": "ef82a762-7d0c-4928-a404-5a1f691aed71",
"name": "스티커 메모6",
"type": "n8n-nodes-base.stickyNote",
"position": [
-320,
576
],
"parameters": {
"width": 1440,
"height": 176,
"content": "## Slack - [Docs](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.slack/)\n\n- Go to 'api.slack.com/apps' and create an account if you haven't already.\n- Create a new app in your workspace and go to OAuth screen from left menu.\n- Add a redirect URL which is your domain with this at the end: '/rest/oauth2-credential/callback'. In scopes section add these scopes as Bot Token Scopes: chat:write, channels:join, channels:read, groups:read... \n- From OAuth Tokens section copy bot token and paste as access token in n8n credential. From basic information page copy signature secret, paste in n8n credential and save."
},
"typeVersion": 1
}
],
"pinData": {},
"connections": {
"b816f0b9-26b1-438d-877a-d1d4ad86fe89": {
"main": [
[
{
"node": "62bc4120-f641-456d-ae3c-2d450941ebe6",
"type": "main",
"index": 0
}
]
]
},
"2e8a6259-5530-4e15-babf-febbad2095ac": {
"main": [
[
{
"node": "b816f0b9-26b1-438d-877a-d1d4ad86fe89",
"type": "main",
"index": 0
}
]
]
},
"517ef436-5323-4ffc-8ead-5c303930987e": {
"main": [
[
{
"node": "05ee377d-5402-46ee-81b4-c56e6115ecd4",
"type": "main",
"index": 0
}
]
]
},
"2d508a48-be41-40cd-be68-2aad83038cce": {
"main": [
[
{
"node": "20270a8c-ac47-4449-a506-618fe2362e17",
"type": "main",
"index": 0
}
],
[
{
"node": "5befe173-4171-4107-be94-4c5ad235ca76",
"type": "main",
"index": 0
}
]
]
},
"67333676-710a-4721-82a4-f9288366c6d0": {
"main": [
[
{
"node": "2d508a48-be41-40cd-be68-2aad83038cce",
"type": "main",
"index": 0
}
]
]
},
"05ee377d-5402-46ee-81b4-c56e6115ecd4": {
"main": [
[
{
"node": "f107d96b-26cf-47ad-97fc-83f64c7b621e",
"type": "main",
"index": 0
}
]
]
},
"25cc4169-c68e-4ed8-a85c-43e432cf5dbf": {
"main": [
[
{
"node": "de6637b3-1a90-4683-b785-ee168de26cbe",
"type": "main",
"index": 0
}
]
]
},
"de6637b3-1a90-4683-b785-ee168de26cbe": {
"main": [
[
{
"node": "d96386b2-75df-49c1-9645-f50a96c92d23",
"type": "main",
"index": 0
}
],
[
{
"node": "17b4693e-d52c-4f1a-97fa-2c42da170df3",
"type": "main",
"index": 0
}
]
]
},
"2a2bad0d-af10-494b-aa21-48c2b1f277c3": {
"main": [
[
{
"node": "de6637b3-1a90-4683-b785-ee168de26cbe",
"type": "main",
"index": 0
}
]
]
},
"20270a8c-ac47-4449-a506-618fe2362e17": {
"main": [
[
{
"node": "de6637b3-1a90-4683-b785-ee168de26cbe",
"type": "main",
"index": 0
}
],
[
{
"node": "2a2bad0d-af10-494b-aa21-48c2b1f277c3",
"type": "main",
"index": 0
}
]
]
},
"17b4693e-d52c-4f1a-97fa-2c42da170df3": {
"main": [
[
{
"node": "67333676-710a-4721-82a4-f9288366c6d0",
"type": "main",
"index": 0
}
]
]
},
"62bc4120-f641-456d-ae3c-2d450941ebe6": {
"main": [
[
{
"node": "517ef436-5323-4ffc-8ead-5c303930987e",
"type": "main",
"index": 0
}
]
]
},
"5befe173-4171-4107-be94-4c5ad235ca76": {
"main": [
[
{
"node": "de6637b3-1a90-4683-b785-ee168de26cbe",
"type": "main",
"index": 0
}
],
[
{
"node": "25cc4169-c68e-4ed8-a85c-43e432cf5dbf",
"type": "main",
"index": 0
}
]
]
},
"f107d96b-26cf-47ad-97fc-83f64c7b621e": {
"main": [
[
{
"node": "de6637b3-1a90-4683-b785-ee168de26cbe",
"type": "main",
"index": 0
}
]
]
}
}
}자주 묻는 질문
이 워크플로우를 어떻게 사용하나요?
위의 JSON 구성 코드를 복사하여 n8n 인스턴스에서 새 워크플로우를 생성하고 "JSON에서 가져오기"를 선택한 후, 구성을 붙여넣고 필요에 따라 인증 설정을 수정하세요.
이 워크플로우는 어떤 시나리오에 적합한가요?
고급
유료인가요?
이 워크플로우는 완전히 무료이며 직접 가져와 사용할 수 있습니다. 다만, 워크플로우에서 사용하는 타사 서비스(예: OpenAI API)는 사용자 직접 비용을 지불해야 할 수 있습니다.
관련 워크플로우 추천
[템플릿] AI 반려동물 가게 v8
🐶 AI 펫 샵 어시스턴트 - GPT-4o, Google 캘린더 및 WhatsApp/Instagram/Facebook 통합
If
N8n
Set
+
If
N8n
Set
244 노드Amanda Benks
영업
AI 대리인 레스토랑 [템플릿]
🤖 WhatsApp, 인스타그램, 메신저의 AI 레스토랑 도우미
If
N8n
Set
+
If
N8n
Set
239 노드Amanda Benks
기타
WordPress 블로그 자동화 프로페셔널 에디션(심층 연구) v2.1 마켓
GPT-4o, Perplexity AI 및 다국어 지원을 사용한 SEO 최적화 블로그 생성 자동화
If
Set
Xml
+
If
Set
Xml
125 노드Daniel Ng
콘텐츠 제작
귀하의 워크플로우를 GitHub 저장소에 저장
매일 워크플로우 백업을 GitHub에 저장하고 Slack 알림 전송
If
N8n
Set
+
If
N8n
Set
18 노드Andrew
데브옵스
시각화 참조 라이브러리에서 n8n 노드를 탐색
可视化 참조 라이브러리에서 n8n 노드를 탐색
If
Ftp
Set
+
If
Ftp
Set
113 노드I versus AI
기타
GitHub 동기화 대시보드 - V2
提交 기록과 롤백 기능을 갖춘 GitHub 워크플로우 버전 관리 대시보드
If
N8n
Set
+
If
N8n
Set
94 노드Eduard
데브옵스