Utilisation de l'IA pour sauvegarder les flux de travail n8n sur GitLab

Intermédiaire

Ceci est unDevOps, AI Summarizationworkflow d'automatisation du domainecontenant 15 nœuds.Utilise principalement des nœuds comme If, N8n, Code, Gitlab, N8nTrigger. Sauvegarde automatique des workflows basée sur la génération de documents GPT-4.1 vers GitLab

Prérequis
  • Personal Access Token GitLab
  • Clé API OpenAI
Aperçu du workflow
Visualisation des connexions entre les nœuds, avec support du zoom et du déplacement
Exporter le workflow
Copiez la configuration JSON suivante dans n8n pour importer et utiliser ce workflow
{
  "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": "Note adhésive",
      "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": "Note adhésive3",
      "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": "Note adhésive2",
      "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": "Note adhésive4",
      "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": "Note adhésive5",
      "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
          }
        ]
      ]
    }
  }
}
Foire aux questions

Comment utiliser ce workflow ?

Copiez le code de configuration JSON ci-dessus, créez un nouveau workflow dans votre instance n8n et sélectionnez "Importer depuis le JSON", collez la configuration et modifiez les paramètres d'authentification selon vos besoins.

Dans quelles scénarios ce workflow est-il adapté ?

Intermédiaire - DevOps, Résumé IA

Est-ce payant ?

Ce workflow est entièrement gratuit et peut être utilisé directement. Veuillez noter que les services tiers utilisés dans le workflow (comme l'API OpenAI) peuvent nécessiter un paiement de votre part.

Informations sur le workflow
Niveau de difficulté
Intermédiaire
Nombre de nœuds15
Catégorie2
Types de nœuds8
Description de la difficulté

Adapté aux utilisateurs expérimentés, avec des workflows de complexité moyenne contenant 6-15 nœuds

Liens externes
Voir sur n8n.io

Partager ce workflow

Catégories

Catégories: 34