KI-gestützte Sicherung von n8n-Workflows in GitLab

Fortgeschritten

Dies ist ein DevOps, AI Summarization-Bereich Automatisierungsworkflow mit 15 Nodes. Hauptsächlich werden If, N8n, Code, Gitlab, N8nTrigger und andere Nodes verwendet. Automatische Sicherung von Workflows basierend auf GPT-4.1-Dokumenten bei GitLab

Voraussetzungen
  • GitLab Personal Access Token
  • OpenAI API Key
Workflow-Vorschau
Visualisierung der Node-Verbindungen, mit Zoom und Pan
Workflow exportieren
Kopieren Sie die folgende JSON-Konfiguration und importieren Sie sie in 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": "Haftnotiz",
      "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": "Haftnotiz3",
      "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": "Haftnotiz2",
      "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": "Haftnotiz4",
      "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": "Haftnotiz5",
      "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
          }
        ]
      ]
    }
  }
}
Häufig gestellte Fragen

Wie verwende ich diesen Workflow?

Kopieren Sie den obigen JSON-Code, erstellen Sie einen neuen Workflow in Ihrer n8n-Instanz und wählen Sie "Aus JSON importieren". Fügen Sie die Konfiguration ein und passen Sie die Anmeldedaten nach Bedarf an.

Für welche Szenarien ist dieser Workflow geeignet?

Fortgeschritten - DevOps, KI-Zusammenfassung

Ist es kostenpflichtig?

Dieser Workflow ist völlig kostenlos. Beachten Sie jedoch, dass Drittanbieterdienste (wie OpenAI API), die im Workflow verwendet werden, möglicherweise kostenpflichtig sind.

Workflow-Informationen
Schwierigkeitsgrad
Fortgeschritten
Anzahl der Nodes15
Kategorie2
Node-Typen8
Schwierigkeitsbeschreibung

Für erfahrene Benutzer, mittelkomplexe Workflows mit 6-15 Nodes

Externe Links
Auf n8n.io ansehen

Diesen Workflow teilen

Kategorien

Kategorien: 34