8
n8n 中文网amn8n.com

n8n工作流自动备份到按用户名组织的GitLab

中级

这是一个DevOps领域的自动化工作流,包含 15 个节点。主要使用 If, N8n, Set, Wait, Gitlab 等节点。 n8n工作流自动备份到按用户名组织的GitLab

前置要求
  • GitLab Personal Access Token
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
  "id": "5ZZy57tVLfqtQZfF",
  "meta": {
    "instanceId": "dd69efaf8212c74ad206700d104739d3329588a6f3f8381a46a481f34c9cc281",
    "templateCredsSetupCompleted": true
  },
  "name": "n8n 工作流自动备份到按用户名组织的 GitLab",
  "tags": [],
  "nodes": [
    {
      "id": "79975f6a-5aa3-4452-ba09-b489eb8c197e",
      "name": "手动备份触发器",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -820,
        35
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "2d5d5165-ba45-410c-8c5a-37c142b24cc1",
      "name": "计划每周备份",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -820,
        235
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "weeks",
              "triggerAtDay": [
                5
              ],
              "triggerAtHour": 18
            }
          ]
        }
      },
      "notesInFlow": false,
      "typeVersion": 1.2
    },
    {
      "id": "6662cc05-fe42-4f80-a59a-ba670ed143f2",
      "name": "获取 N8N 工作流",
      "type": "n8n-nodes-base.n8n",
      "position": [
        -600,
        135
      ],
      "parameters": {
        "filters": {},
        "requestOptions": {}
      },
      "credentials": {
        "n8nApi": {
          "id": "IAN18QKBV0noRrm4",
          "name": "n8n account - test"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "08d1c5cc-725b-4c9b-a7e4-55df5cd74a27",
      "name": "准备备份元数据",
      "type": "n8n-nodes-base.set",
      "position": [
        -380,
        135
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "backup-date",
              "name": "backupDate",
              "type": "string",
              "value": "={{ $now.setZone('UTC').toFormat('yyyy-MM-dd') }}"
            },
            {
              "id": "backup-path",
              "name": "backupPath",
              "type": "string",
              "value": "=backups/{{ $now.setZone('UTC').toFormat('yyyy') }}/{{ $now.setZone('UTC').toFormat('MM') }}"
            }
          ]
        },
        "includeOtherFields": true
      },
      "typeVersion": 3.3
    },
    {
      "id": "cbae944a-2622-4ae7-99c1-56efc56d07cf",
      "name": "处理每个工作流",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -160,
        135
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "693af3e9-5e9c-44c6-84a3-9a7c7dcca189",
      "name": "为 GitLab 格式化工作流",
      "type": "n8n-nodes-base.set",
      "position": [
        60,
        -140
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "workflow-data",
              "name": "workflowData",
              "type": "object",
              "value": "={{\n  {\n    \"id\": $json.id,\n    \"name\": $json.name,\n    \"active\": $json.active,\n    \"nodes\": $json.nodes,\n    \"connections\": $json.connections,\n    \"settings\": $json.settings,\n    \"staticData\": $json.staticData,\n    \"tags\": $json.tags,\n    \"versionId\": $json.versionId,\n    \"triggerCount\": $json.triggerCount,\n    \"createdAt\": $json.createdAt,\n    \"updatedAt\": $json.updatedAt\n  }\n}}"
            },
            {
              "id": "creator-name",
              "name": "creatorName",
              "type": "string",
              "value": "={{ $json.name.toLowerCase().includes('vrushti') ? 'vrushti' : $json.name.toLowerCase().includes('poojan') ? 'poojan' : $json.name.toLowerCase().includes('pragnesh') ? 'pragnesh' : $json.name.toLowerCase().includes('ajay') ? 'ajay' : 'general' }}"
            },
            {
              "id": "file-name",
              "name": "fileName",
              "type": "string",
              "value": "={{ $json.name.replace(/[^a-zA-Z0-9\\-_]/g, '_').replace(/_+/g, '_').replace(/^_|_$/g, '') }}.json"
            },
            {
              "id": "file-path",
              "name": "filePath",
              "type": "string",
              "value": "=n8n-workflows/{{ $json.name.toLowerCase().includes('vrushti') ? 'vrushti' : $json.name.toLowerCase().includes('poojan') ? 'poojan' : $json.name.toLowerCase().includes('pragnesh') ? 'pragnesh' : $json.name.toLowerCase().includes('ajay') ? 'ajay' : 'general' }}/{{ $json.name.replace(/[^a-zA-Z0-9\\-_]/g, '_').replace(/_+/g, '_').replace(/^_|_$/g, '') }}.json"
            }
          ]
        },
        "includeOtherFields": true
      },
      "typeVersion": 3.3
    },
    {
      "id": "dea22b1e-e1b3-4440-b757-ba70339950de",
      "name": "速率限制控制",
      "type": "n8n-nodes-base.wait",
      "position": [
        280,
        -140
      ],
      "webhookId": "c06823b0-4637-4e20-9c10-e020b3a74649",
      "parameters": {
        "amount": 2
      },
      "typeVersion": 1.1
    },
    {
      "id": "419a3294-fe3c-41e8-a863-3b9143c8fbba",
      "name": "检查备份状态",
      "type": "n8n-nodes-base.if",
      "position": [
        720,
        -140
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "6edbebb3-1dc9-4e70-bd4b-0c02e6574808",
              "operator": {
                "name": "filter.operator.equals",
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.error }}",
              "rightValue": "Bad request - please check your parameters"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "bf9ad468-20ad-412a-aceb-034e06795780",
      "name": "记录备份结果",
      "type": "n8n-nodes-base.set",
      "position": [
        60,
        60
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "error-log",
              "name": "errorLog",
              "type": "string",
              "value": "=Failed to process {{ $json.fileName }}: {{ $json.error?.message || 'Unknown error' }}"
            },
            {
              "id": "success-log",
              "name": "successLog",
              "type": "string",
              "value": "=Successfully processed {{ $json.fileName }} for {{ $json.creatorName }}"
            }
          ]
        },
        "includeOtherFields": true
      },
      "typeVersion": 3.3
    },
    {
      "id": "7d67c031-8c4a-409b-9c7e-69775b28abf1",
      "name": "更新备份摘要",
      "type": "n8n-nodes-base.gitlab",
      "position": [
        940,
        35
      ],
      "parameters": {
        "owner": "gitlab-user",
        "branch": "main",
        "filePath": "={{ $('Rate Limit Control').item.json.filePath }}",
        "resource": "file",
        "operation": "edit",
        "repository": "n8n-backup",
        "fileContent": "={{ JSON.stringify( $('Rate Limit Control').item.json.workflowData, null, 2) }}",
        "commitMessage": "=Update {{ $('Rate Limit Control').item.json.fileName }} in {{ $('Rate Limit Control').item.json.creatorName }} folder via n8n automation"
      },
      "credentials": {
        "gitlabApi": {
          "id": "F4ZDDauIbw2lHATd",
          "name": "GitLab account - test "
        }
      },
      "typeVersion": 1,
      "continueOnFail": true
    },
    {
      "id": "52424bd4-cbce-44a9-ab17-ddf1a910a5b9",
      "name": "发送邮件",
      "type": "n8n-nodes-base.emailSend",
      "position": [
        280,
        60
      ],
      "webhookId": "c2139c63-5ead-4606-b54f-1d94f77d1b20",
      "parameters": {
        "text": "Hello,\n\nThe scheduled backup of all n8n workflows has been completed successfully.\n\nAll workflows have been committed to the GitLab repository without any errors.\n\nRegards,\nn8n Automation Bot",
        "options": {},
        "subject": "n8n workflows backup notification",
        "toEmail": "abc.gmail.com",
        "fromEmail": "xyz@gmail.com",
        "emailFormat": "text"
      },
      "credentials": {
        "smtp": {
          "id": "G1kyF8cSWTZ4vouN",
          "name": "SMTP -test"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "5447ade3-d338-4341-ac86-36e1c1379f5f",
      "name": "创建到 GitLab 仓库",
      "type": "n8n-nodes-base.gitlab",
      "position": [
        500,
        -140
      ],
      "parameters": {
        "owner": "gitlab-user",
        "branch": "main",
        "filePath": "={{ $json.filePath }}",
        "resource": "file",
        "repository": "n8n-backup",
        "fileContent": "={{ JSON.stringify($json.workflowData, null, 2) }}",
        "commitMessage": "=Add  {{ $json.fileName }} - {{ $json.creatorName }} folder via n8n automation"
      },
      "credentials": {
        "gitlabApi": {
          "id": "F4ZDDauIbw2lHATd",
          "name": "GitLab account - test "
        }
      },
      "typeVersion": 1,
      "continueOnFail": true
    },
    {
      "id": "bf1d778c-2363-46da-8197-2fc673b0b258",
      "name": "便签",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -900,
        -160
      ],
      "parameters": {
        "height": 560,
        "content": "## 备份启动:"
      },
      "typeVersion": 1
    },
    {
      "id": "742d27cd-19e4-46d5-bffb-0bac0d101a58",
      "name": "便签1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -630,
        -265
      ],
      "parameters": {
        "color": 3,
        "width": 380,
        "height": 560,
        "content": "## 工作流检索与准备:"
      },
      "typeVersion": 1
    },
    {
      "id": "8c5e0911-391d-44ca-871b-8d6e20e65939",
      "name": "便签2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -230,
        -265
      ],
      "parameters": {
        "color": 6,
        "width": 1340,
        "height": 560,
        "content": "## 组合处理、存储和通知:"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "53da3fbb-7cb8-467b-bac5-c82a414b0096",
  "connections": {
    "Log Backup Results": {
      "main": [
        [
          {
            "node": "Send email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Rate Limit Control": {
      "main": [
        [
          {
            "node": "Create to GitLab Repository",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check Backup Status": {
      "main": [
        [
          {
            "node": "Update Backup Summary",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Process Each Workflow",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch N8N Workflows": {
      "main": [
        [
          {
            "node": "Prepare Backup Metadata",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Manual Backup Trigger": {
      "main": [
        [
          {
            "node": "Fetch N8N Workflows",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Process Each Workflow": {
      "main": [
        [
          {
            "node": "Log Backup Results",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Format Workflow for GitLab",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update Backup Summary": {
      "main": [
        [
          {
            "node": "Process Each Workflow",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare Backup Metadata": {
      "main": [
        [
          {
            "node": "Process Each Workflow",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Scheduled Weekly Backup": {
      "main": [
        [
          {
            "node": "Fetch N8N Workflows",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Format Workflow for GitLab": {
      "main": [
        [
          {
            "node": "Rate Limit Control",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create to GitLab Repository": {
      "main": [
        [
          {
            "node": "Check Backup Status",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
常见问题

如何使用这个工作流?

复制上方的 JSON 配置代码,在您的 n8n 实例中创建新工作流并选择「从 JSON 导入」,粘贴配置后根据需要修改凭证设置即可。

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

中级 - 开发运维

需要付费吗?

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

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

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

作者
Oneclick AI Squad

Oneclick AI Squad

@oneclick-ai

The AI Squad Initiative is a pioneering effort to build, automate and scale AI-powered workflows using n8n.io. Our mission is to help individuals and businesses integrate AI agents seamlessly into their daily operations from automating tasks and enhancing productivity to creating innovative, intelligent solutions. We design modular, reusable AI workflow templates that empower creators, developers and teams to supercharge their automation with minimal effort and maximum impact.

外部链接
在 n8n.io 查看

分享此工作流