8
n8n 中文网amn8n.com

使用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": "Sticky Note",
      "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": "Sticky Note3",
      "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": "Sticky Note2",
      "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": "Sticky Note4",
      "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": "Sticky Note5",
      "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 导入」,粘贴配置后根据需要修改凭证设置即可。

这个工作流适合什么场景?

中级 - 开发运维, AI 摘要总结

需要付费吗?

本工作流完全免费,您可以直接导入使用。但请注意,工作流中使用的第三方服务(如 OpenAI API)可能需要您自行付费。

工作流信息
难度等级
中级
节点数量15
分类2
节点类型8
难度说明

适合有一定经验的用户,包含 6-15 个节点的中等复杂度工作流

外部链接
在 n8n.io 查看

分享此工作流

分类

分类: 34