毎日のワークフローを 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