8
n8n 한국어amn8n.com

매일 워크플로우 백업을 GitLab에 저장并发송 Slack 알림

고급

이것은자동화 워크플로우로, 22개의 노드를 포함합니다.주로 If, N8n, Set, Code, Slack 등의 노드를 사용하며. 매일 워크플로우 백업을 GitLab에 저장하고 Slack 알림 전송

사전 요구사항
  • Slack Bot Token 또는 Webhook URL
  • GitLab Personal Access Token

카테고리

-
워크플로우 미리보기
노드 연결 관계를 시각적으로 표시하며, 확대/축소 및 이동을 지원합니다
워크플로우 내보내기
다음 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)는 사용자 직접 비용을 지불해야 할 수 있습니다.

워크플로우 정보
난이도
고급
노드 수22
카테고리-
노드 유형12
난이도 설명

고급 사용자를 위한 16+개 노드의 복잡한 워크플로우

저자

AI Developer & Automation Consultant

외부 링크
n8n.io에서 보기

이 워크플로우 공유

카테고리

카테고리: 34