AIを使ってn8nワークフローをGitLabにバックアップ
中級
これはDevOps, AI Summarization分野の自動化ワークフローで、15個のノードを含みます。主にIf, N8n, Code, Gitlab, N8nTriggerなどのノードを使用。 GPT-4.1ドキュメントベースの自動ワークフローによるGitLabへのバックアップ
前提条件
- •GitLab Personal Access Token
- •OpenAI API Key
ワークフロープレビュー
ノード接続関係を可視化、ズームとパンをサポート
ワークフローをエクスポート
以下のJSON設定をn8nにインポートして、このワークフローを使用できます
{
"id": "jzbnQsF9eV0G8PKA",
"meta": {
"instanceId": "a28fa941f4dd50ba130162204d368b9dfd7d9b960d864f7ae0094ae8b516daa8",
"templateCredsSetupCompleted": true
},
"name": "Backup n8n workflows to GitLab with AI",
"tags": [],
"nodes": [
{
"id": "3e71ace2-735e-47c8-a9c0-23c575080f47",
"name": "If",
"type": "n8n-nodes-base.if",
"position": [
560,
-336
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "db9435fd-f5b4-4c18-a9a2-0b6471c029e8",
"operator": {
"type": "boolean",
"operation": "true",
"singleValue": true
},
"leftValue": "={{ $json.isFileOnGit }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
},
{
"id": "d5316aa4-c279-4eec-a7af-c10e0ed663f8",
"name": "When Executed by Another Workflow",
"type": "n8n-nodes-base.executeWorkflowTrigger",
"position": [
-336,
-432
],
"parameters": {
"inputSource": "passthrough"
},
"typeVersion": 1.1
},
{
"id": "5b647f82-91ee-43d2-be81-72f615d7cae3",
"name": "Workflow Change Detector",
"type": "n8n-nodes-base.n8nTrigger",
"position": [
-336,
-240
],
"parameters": {
"events": [
"update",
"activate"
]
},
"typeVersion": 1
},
{
"id": "12c58db0-c097-444e-ace7-6d7492547130",
"name": "Fetch Updated Workflow",
"type": "n8n-nodes-base.n8n",
"position": [
-112,
-336
],
"parameters": {
"operation": "get",
"workflowId": {
"__rl": true,
"mode": "id",
"value": "={{ $json.workflow_id }}"
},
"requestOptions": {}
},
"credentials": {
"n8nApi": {
"id": "sPrxjiTGmum0YltE",
"name": "n8n account"
}
},
"typeVersion": 1
},
{
"id": "5b6307b5-bef1-4064-93d5-8651585dccc2",
"name": "Check GitLab Repository",
"type": "n8n-nodes-base.gitlab",
"onError": "continueRegularOutput",
"position": [
112,
-336
],
"parameters": {
"owner": "n8n_projects",
"filePath": "={{$json.name +'/' }}",
"resource": "file",
"operation": "list",
"returnAll": true,
"repository": "all_projects",
"additionalParameters": {}
},
"credentials": {
"gitlabApi": {
"id": "jSe8yMHXlJPNv5lh",
"name": "GitLab account"
}
},
"typeVersion": 1
},
{
"id": "cdce94a6-bb32-4ab5-b6fa-d32a13706cbb",
"name": "Analyze Repository State",
"type": "n8n-nodes-base.code",
"position": [
336,
-336
],
"parameters": {
"jsCode": "// Loop over input items and add a new field called 'myNewField' to the JSON of each one\nconst err = $input.first().json.error;\nif(err\n && err.indexOf(\"resource you are requesting could not be found\")>0)\n return {workflow: $('Fetch Updated Workflow').first().json,isFileOnGit:false};\n\nlet isFileOnGit = false;\nfor (const item of $input.all()) {\n if(item.json.name == $('Fetch Updated Workflow').first().json.name +\".json\"){\n isFileOnGit = true;\n break;\n }\n}\n\nreturn {workflow: $('Fetch Updated Workflow').first().json,isFileOnGit};"
},
"typeVersion": 2
},
{
"id": "4db0954c-e7f3-45af-892d-b7befd983539",
"name": "Update Existing Workflow",
"type": "n8n-nodes-base.gitlab",
"position": [
784,
-432
],
"parameters": {
"owner": "n8n_projects",
"branch": "main",
"filePath": "={{ $('Analyze Repository State').item.json.workflow.name+'/'+$('Analyze Repository State').item.json.workflow.name +\".json\"}}",
"resource": "file",
"operation": "edit",
"repository": "all_projects",
"fileContent": "={{ $('Analyze Repository State').item.json.workflow.toJsonString() }}",
"commitMessage": "={{ `updated by n8n` }}"
},
"credentials": {
"gitlabApi": {
"id": "jSe8yMHXlJPNv5lh",
"name": "GitLab account"
}
},
"typeVersion": 1
},
{
"id": "d5595a4d-e56e-4d97-a794-68bb09c6bdd8",
"name": "Create New Workflow File",
"type": "n8n-nodes-base.gitlab",
"position": [
784,
-240
],
"parameters": {
"owner": "n8n_projects",
"branch": "main",
"filePath": "={{$('Analyze Repository State').item.json.workflow.name+'/'+ $('Analyze Repository State').item.json.workflow.name +\".json\"}}",
"resource": "file",
"repository": "all_projects",
"fileContent": "={{$json.workflow.toJsonString()}}",
"commitMessage": "Pushed by n8n"
},
"credentials": {
"gitlabApi": {
"id": "jSe8yMHXlJPNv5lh",
"name": "GitLab account"
}
},
"typeVersion": 1
},
{
"id": "4cde1c01-7294-493d-908a-adeca486c213",
"name": "Generate AI Documentation",
"type": "@n8n/n8n-nodes-langchain.openAi",
"position": [
1008,
-240
],
"parameters": {
"modelId": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1",
"cachedResultName": "GPT-4.1"
},
"options": {},
"messages": {
"values": [
{
"content": "=Generate a simple readme.md for the following n8n workflow json.\nYour json output must be exaclty this:\n{\"README\":\"The markdown content\"}\nWorkflow JSON:\n\n{{ $('Analyze Repository State').item.json.workflow.toJsonString() }}"
}
]
},
"jsonOutput": true
},
"credentials": {
"openAiApi": {
"id": "OLXWXsZdKGOvJr95",
"name": "OpenAi account"
}
},
"typeVersion": 1.8
},
{
"id": "a8471cd5-0619-44cd-ae4e-e07dba2b87fa",
"name": "Save README to GitLab",
"type": "n8n-nodes-base.gitlab",
"position": [
1408,
-240
],
"parameters": {
"owner": "n8n_projects",
"branch": "main",
"filePath": "={{$('Analyze Repository State').item.json.workflow.name+'/readme.md'}}",
"resource": "file",
"repository": "all_projects",
"fileContent": "={{ $json.message.content.README }}",
"commitMessage": "Pushed by n8n"
},
"credentials": {
"gitlabApi": {
"id": "jSe8yMHXlJPNv5lh",
"name": "GitLab account"
}
},
"typeVersion": 1
},
{
"id": "80f77f85-0766-4107-83b2-57e2d4cb9d73",
"name": "付箋",
"type": "n8n-nodes-base.stickyNote",
"position": [
-496,
-848
],
"parameters": {
"width": 480,
"height": 416,
"content": "**Auto backup n8n workflows to GitLab with AI-generated documentation**\nThis n8n template automatically backs up your workflows to a GitLab repository whenever they're updated or activated, and generates README documentation using AI.\n\n**Who's it for** :\nThis template is perfect for n8n users who want to:\n\nMaintain version control of their workflows\nCreate automatic backups in Git repositories\nGenerate documentation for their workflows using AI\nKeep their workflow library organized and documented\n\n**How it works**\nThe workflow monitors n8n for workflow updates and activations, then automatically saves the workflow JSON to GitLab and generates a README file using OpenAI.\n\n**This workflow can be added as a sub-workflow to any existing workflow to enable backup functionality.**\n"
},
"typeVersion": 1
},
{
"id": "18b73c77-f66c-4bb7-82be-0ec51d6f488d",
"name": "付箋3",
"type": "n8n-nodes-base.stickyNote",
"position": [
64,
-400
],
"parameters": {
"color": 7,
"width": 424,
"height": 224,
"content": "Retrieves workflow data and checks repository status to determine is the file exist on repo"
},
"typeVersion": 1
},
{
"id": "a032531b-7e75-4c53-8abf-c259c55ea10e",
"name": "付箋2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-496,
-272
],
"parameters": {
"color": 7,
"height": 80,
"content": "Triggers when workflows are updated or activated"
},
"typeVersion": 1
},
{
"id": "538be132-53e5-424c-afdd-d74f7dcd282b",
"name": "付箋4",
"type": "n8n-nodes-base.stickyNote",
"position": [
544,
-512
],
"parameters": {
"color": 7,
"width": 400,
"height": 480,
"content": "Creates or updates workflow files in GitLab"
},
"typeVersion": 1
},
{
"id": "796de781-25ef-42a4-a17f-6ffc350e4aeb",
"name": "付箋5",
"type": "n8n-nodes-base.stickyNote",
"position": [
976,
-320
],
"parameters": {
"color": 7,
"width": 312,
"height": 288,
"content": "Uses OpenAI to generate README files automatically"
},
"typeVersion": 1
}
],
"active": true,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "8b4b37e5-d7f5-4c32-84c8-90d1fa120a8a",
"connections": {
"3e71ace2-735e-47c8-a9c0-23c575080f47": {
"main": [
[
{
"node": "4db0954c-e7f3-45af-892d-b7befd983539",
"type": "main",
"index": 0
}
],
[
{
"node": "d5595a4d-e56e-4d97-a794-68bb09c6bdd8",
"type": "main",
"index": 0
}
]
]
},
"12c58db0-c097-444e-ace7-6d7492547130": {
"main": [
[
{
"node": "5b6307b5-bef1-4064-93d5-8651585dccc2",
"type": "main",
"index": 0
}
]
]
},
"5b6307b5-bef1-4064-93d5-8651585dccc2": {
"main": [
[
{
"node": "cdce94a6-bb32-4ab5-b6fa-d32a13706cbb",
"type": "main",
"index": 0
}
]
]
},
"cdce94a6-bb32-4ab5-b6fa-d32a13706cbb": {
"main": [
[
{
"node": "3e71ace2-735e-47c8-a9c0-23c575080f47",
"type": "main",
"index": 0
}
]
]
},
"d5595a4d-e56e-4d97-a794-68bb09c6bdd8": {
"main": [
[
{
"node": "4cde1c01-7294-493d-908a-adeca486c213",
"type": "main",
"index": 0
}
]
]
},
"5b647f82-91ee-43d2-be81-72f615d7cae3": {
"main": [
[
{
"node": "12c58db0-c097-444e-ace7-6d7492547130",
"type": "main",
"index": 0
}
]
]
},
"4cde1c01-7294-493d-908a-adeca486c213": {
"main": [
[
{
"node": "a8471cd5-0619-44cd-ae4e-e07dba2b87fa",
"type": "main",
"index": 0
}
]
]
},
"d5316aa4-c279-4eec-a7af-c10e0ed663f8": {
"main": [
[
{
"node": "12c58db0-c097-444e-ace7-6d7492547130",
"type": "main",
"index": 0
}
]
]
}
}
}よくある質問
このワークフローの使い方は?
上記のJSON設定コードをコピーし、n8nインスタンスで新しいワークフローを作成して「JSONからインポート」を選択、設定を貼り付けて認証情報を必要に応じて変更してください。
このワークフローはどんな場面に適していますか?
中級 - DevOps, AI要約
有料ですか?
このワークフローは完全無料です。ただし、ワークフローで使用するサードパーティサービス(OpenAI APIなど)は別途料金が発生する場合があります。
関連ワークフロー
UniFi コントローラー: リリース時にチェックし、アップグレードを実行
SSHとTelegram通知を利用したUniFiコントローラー更新の自動化
If
Ssh
Code
+
If
Ssh
Code
11 ノードDominic Spatz
DevOps
GitHub への自動化 n8n ワークフロー バックアップおよび削除の追跡
n8n のワーキングフローを GitHub へ自動バックアップし、削除を追跡
If
N8n
Set
+
If
N8n
Set
31 ノードMarcial Ambriz
DevOps
Telegram自動複製ヘッドライナー
GPT-4o-miniを基にしたTelegramチャンネルコンテンツの自動コピーと翻译
If
Set
Code
+
If
Set
Code
19 ノードShohani
ソーシャルメディア
Telegram-n8n コマンダー
Telegram ボットコマンドによる n8n インスタンスのリモート制御
If
N8n
Set
+
If
N8n
Set
67 ノードArthur Braghetto
DevOps
GPTとTTSを使ってWhatsAppでウェブサイトを音声要約に変換
WhatsAppを通じてGPTとTTSを使用して、ウェブサイトを音声要約に変換します
If
Set
Code
+
If
Set
Code
23 ノードAnthony
個人の生産性
GitHub 同期ダッシュボード - V2
コミット履歴とロールバック機能を備えた GitHub ワークフロー バージョン管理ダッシュボード
If
N8n
Set
+
If
N8n
Set
94 ノードEduard
DevOps