毎日のワークフローを 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、Instagram、Messengerの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
DevOps
n8nノードの探索(可視化リファレンスライブラリ内)
n8nノードを可視化リファレンスライブラリで探索
If
Ftp
Set
+
If
Ftp
Set
113 ノードI versus AI
その他
GitHub 同期ダッシュボード - V2
コミット履歴とロールバック機能を備えた GitHub ワークフロー バージョン管理ダッシュボード
If
N8n
Set
+
If
N8n
Set
94 ノードEduard
DevOps