Workflow n8n

Automatisation GitLab avec n8n : sauvegarde et gestion de fichiers

Ce workflow n8n a pour objectif d'automatiser la gestion des fichiers sur GitLab, en facilitant la sauvegarde et l'édition de fichiers existants. Dans un contexte où la gestion des versions et la collaboration sur des projets sont essentielles, ce workflow s'adresse aux équipes de développement et aux entreprises qui souhaitent optimiser leur processus de sauvegarde. Grâce à cette automatisation n8n, les utilisateurs peuvent facilement créer, modifier ou vérifier l'existence de fichiers dans leurs dépôts GitLab sans intervention manuelle.

  • Étape 1 : le workflow commence par un déclencheur manuel ou programmé via le nœud 'Backup Now - Manual Trigger' ou 'Schedule Trigger'.
  • Étape 2 : il utilise le nœud 'Fetch List of Existing Files' pour récupérer la liste des fichiers présents dans le dépôt.
  • Étape 3 : une condition vérifie si le fichier existe déjà grâce au nœud 'File Exists in Gitlab?'. Si le fichier existe, il est récupéré avec 'Fetch Existing File Content', sinon, un nouveau fichier est créé avec 'Create New File(s)'.
  • Étape 4 : le contenu des fichiers peut être modifié avec 'Edit Existing File(s)', permettant ainsi de garder les fichiers à jour. Ce workflow apporte une valeur ajoutée significative en réduisant le temps consacré à la gestion manuelle des fichiers et en minimisant les risques d'erreurs, tout en assurant une traçabilité et une organisation optimales des projets.
Tags clés :automatisationGitLabworkflowgestion de fichiersn8n
Catégorie: Manual | Scheduled · Tags: automatisation, GitLab, workflow, gestion de fichiers, n8n0

Workflow n8n GitLab, gestion de fichiers : vue d'ensemble

Schéma des nœuds et connexions de ce workflow n8n, généré à partir du JSON n8n.

Workflow n8n GitLab, gestion de fichiers : détail des nœuds

  • Backup Now - Manual Trigger

    Déclenche manuellement le workflow.

  • n8n

    Permet d'exécuter des opérations spécifiques dans n8n avec des filtres et des options de requête.

  • Globals

    Définit des variables globales pour le workflow.

  • Create New File(s)

    Crée de nouveaux fichiers dans un dépôt GitLab.

  • Edit Existing File(s)

    Modifie des fichiers existants dans un dépôt GitLab.

  • Derive Filename From Workflow Name

    Génère un nom de fichier à partir du nom du workflow.

  • Fetch Existing File Content

    Récupère le contenu d'un fichier existant dans un dépôt GitLab.

  • Sticky Note

    Crée une note autocollante avec des paramètres de couleur, de taille et de contenu.

  • Sticky Note1

    Crée une deuxième note autocollante avec des paramètres de couleur, de taille et de contenu.

  • Sticky Note2

    Crée une note autocollante avec des paramètres de taille et de contenu.

  • Skip Unchanged Files

    Filtre les fichiers pour ignorer ceux qui n'ont pas changé.

  • Sticky Note3

    Crée une troisième note autocollante avec des paramètres de couleur, de taille et de contenu.

  • Schedule Trigger

    Déclenche le workflow selon un calendrier défini.

  • Fetch List of Existing Files

    Récupère la liste des fichiers existants dans un dépôt GitLab.

  • Combine Gitlab Existing Files as Single List Item

    Combine les fichiers existants de GitLab en un seul élément de liste.

  • File Exists in Gitlab?

    Vérifie si un fichier existe dans GitLab en fonction de conditions spécifiées.

Inscris-toi pour voir l'intégralité du workflow

Inscription gratuite

S'inscrire gratuitementBesoin d'aide ?
{
  "nodes": [
    {
      "id": "3e2820cb-24a4-491b-8f8b-60f97b0748dc",
      "name": "Backup Now - Manual Trigger",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        520,
        320
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "bc5588e5-b67a-4713-b8e7-c21227048a2d",
      "name": "n8n",
      "type": "n8n-nodes-base.n8n",
      "position": [
        980,
        520
      ],
      "parameters": {
        "filters": {
          "tags": "={{ $('Globals').first().json.tags_to_match_for_backup }}"
        },
        "requestOptions": {}
      },
      "credentials": {
        "n8nApi": {
          "id": "L3X3qWRmwZRYCpV8",
          "name": "Source n8n Account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "2a5af64d-b5c3-4180-bae5-9efeeaeba99d",
      "name": "Globals",
      "type": "n8n-nodes-base.set",
      "position": [
        740,
        400
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "150135fb-c0fb-444b-aeed-eac851af255d",
              "name": "gitlab_owner",
              "type": "string",
              "value": "mygitlabownername"
            },
            {
              "id": "8a9359c0-5a16-482b-8f3a-c8b20fbc13c0",
              "name": "gitlab_project",
              "type": "string",
              "value": "n8n_workflow_backups"
            },
            {
              "id": "00843c18-7d09-4d60-ab70-534ca0791504",
              "name": "gitlab_workflow_path",
              "type": "string",
              "value": "workflow_definitions"
            },
            {
              "id": "8fbcc201-dbff-440b-b440-42e8f1735548",
              "name": "tags_to_match_for_backup",
              "type": "string",
              "value": "gitlab_backup_enabled"
            },
            {
              "id": "e17051bc-d8b3-4cef-bad0-efe38a7be464",
              "name": "execution_type",
              "type": "string",
              "value": "={{ ( $('Schedule Trigger').isExecuted) ? 'Scheduled' : 'Manual' }}"
            },
            {
              "id": "8b90fba9-df11-4e07-a7ae-31405143e831",
              "name": "execution_time",
              "type": "string",
              "value": "={{ $now }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "b6b44b4b-e5a7-4ce6-9cff-e7a21679ad32",
      "name": "Create New File(s)",
      "type": "n8n-nodes-base.gitlab",
      "position": [
        2060,
        540
      ],
      "parameters": {
        "owner": "={{ $('Globals').first().json.gitlab_owner }}",
        "branch": "main",
        "filePath": "={{ $('Globals').first().json.gitlab_workflow_path }}/{{ $('Derive Filename From Workflow Name').item.json.normalized_filename }}",
        "resource": "file",
        "repository": "={{ $('Globals').first().json.gitlab_project }}",
        "fileContent": "={{ JSON.stringify($('n8n').item.json, null, 4) }}",
        "commitMessage": "=(Initial) {{ $('Globals').first().json.execution_type }} Backup - {{ $('Globals').first().json.execution_time }}."
      },
      "credentials": {
        "gitlabApi": {
          "id": "Nv1DoplS64rrPZVm",
          "name": "Target GitLab Account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "167ae6cd-b8dd-4e01-aca4-4888fcaf9958",
      "name": "Edit Existing File(s)",
      "type": "n8n-nodes-base.gitlab",
      "position": [
        2060,
        340
      ],
      "parameters": {
        "owner": "={{ $('Globals').first().json.gitlab_owner }}",
        "branch": "main",
        "filePath": "={{ $('Globals').first().json.gitlab_workflow_path }}/{{ $('Derive Filename From Workflow Name').item.json.normalized_filename }}",
        "resource": "file",
        "operation": "edit",
        "repository": "={{ $('Globals').first().json.gitlab_project }}",
        "fileContent": "={{ JSON.stringify($('n8n').item.json, null, 4) }}",
        "commitMessage": "={{ $('Globals').first().json.execution_type }} Backup - {{ $('Globals').first().json.execution_time }}."
      },
      "credentials": {
        "gitlabApi": {
          "id": "Nv1DoplS64rrPZVm",
          "name": "Target GitLab Account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "a4437388-9143-4c91-841e-c062ab9af3c0",
      "name": "Derive Filename From Workflow Name",
      "type": "n8n-nodes-base.set",
      "position": [
        1160,
        520
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "d2110dc6-1f31-46b3-991e-556b2255d76e",
              "name": "normalized_filename",
              "type": "string",
              "value": "={{ $json.name.replace(/[^a-zA-Z0-9]/g, '') }}.json"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "cb0fca8f-dc43-4903-a8e1-5b7acf9157b1",
      "name": "Fetch Existing File Content",
      "type": "n8n-nodes-base.gitlab",
      "position": [
        1640,
        340
      ],
      "parameters": {
        "owner": "={{ $('Globals').first().json.gitlab_owner }}",
        "filePath": "={{ $('Globals').first().json.gitlab_workflow_path }}/{{ $('Derive Filename From Workflow Name').item.json.normalized_filename }}",
        "resource": "file",
        "operation": "get",
        "repository": "={{ $('Globals').first().json.gitlab_project }}",
        "asBinaryProperty": false,
        "additionalParameters": {
          "reference": "main"
        }
      },
      "credentials": {
        "gitlabApi": {
          "id": "Nv1DoplS64rrPZVm",
          "name": "Target GitLab Account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "816843c4-769c-4033-a38e-1c6ef5325e15",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        940,
        120
      ],
      "parameters": {
        "color": 5,
        "width": 401,
        "height": 246,
        "content": "## Gather Gitlab Info"
      },
      "typeVersion": 1
    },
    {
      "id": "19f3fe4d-acba-4e7b-b92c-ce9024a8f37d",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        940,
        460
      ],
      "parameters": {
        "color": 5,
        "width": 398,
        "height": 240,
        "content": "## Gather n8n Info"
      },
      "typeVersion": 1
    },
    {
      "id": "418bef31-adf6-419b-87f1-faa2581e5766",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1380,
        280
      ],
      "parameters": {
        "width": 598,
        "height": 384.41789416257484,
        "content": "## Decide Whether to Create or Edit or Skip"
      },
      "typeVersion": 1
    },
    {
      "id": "f3b98ded-c767-4822-bcf4-25931be03f48",
      "name": "Skip Unchanged Files",
      "type": "n8n-nodes-base.filter",
      "position": [
        1820,
        340
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "3298ab8b-9934-4ed7-9c38-03f325dc71e2",
              "operator": {
                "type": "string",
                "operation": "notEquals"
              },
              "leftValue": "={{ JSON.stringify($('n8n').item.json, null, 4) }}",
              "rightValue": "={{ $json.content.base64Decode() }}"
            }
          ]
        }
      },
      "typeVersion": 2
    },
    {
      "id": "6bbf5146-7129-4ca8-8576-39d5cbe8e0b9",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        480,
        220
      ],
      "parameters": {
        "color": 4,
        "width": 402,
        "height": 452,
        "content": "## Start / Trigger & Configure"
      },
      "typeVersion": 1
    },
    {
      "id": "0e5d9c9f-40b4-494d-8233-a2b4fea67d76",
      "name": "Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        520,
        520
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "cronExpression",
              "expression": "30 21 * * 6"
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "be08176e-3961-43d7-b182-89a4f45805f6",
      "name": "Fetch List of Existing Files",
      "type": "n8n-nodes-base.gitlab",
      "position": [
        980,
        180
      ],
      "parameters": {
        "owner": "={{ $('Globals').first().json.gitlab_owner }}",
        "filePath": "={{ $('Globals').first().json.gitlab_workflow_path }}",
        "resource": "file",
        "operation": "list",
        "returnAll": true,
        "repository": "={{ $('Globals').item.json.gitlab_project }}",
        "additionalParameters": {
          "ref": "main"
        }
      },
      "credentials": {
        "gitlabApi": {
          "id": "Nv1DoplS64rrPZVm",
          "name": "Target GitLab Account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "674cdaa8-f8fe-4f6d-8743-062d3fd1ff95",
      "name": "Combine Gitlab Existing Files as Single List Item",
      "type": "n8n-nodes-base.aggregate",
      "position": [
        1180,
        180
      ],
      "parameters": {
        "options": {},
        "fieldsToAggregate": {
          "fieldToAggregate": [
            {
              "renameField": true,
              "outputFieldName": "gitlab_existing_filenames",
              "fieldToAggregate": "name"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "463ae3fb-4d66-497d-81eb-7e55b5945d84",
      "name": "File Exists in Gitlab?",
      "type": "n8n-nodes-base.if",
      "position": [
        1440,
        460
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "0740c2be-ab9d-4249-af46-0d94f58c318f",
              "operator": {
                "type": "array",
                "operation": "contains",
                "rightType": "any"
              },
              "leftValue": "={{ $('Combine Gitlab Existing Files as Single List Item').first().json.gitlab_existing_filenames }}",
              "rightValue": "={{ $('Derive Filename From Workflow Name').item.json.normalized_filename }}"
            }
          ]
        }
      },
      "typeVersion": 2
    }
  ],
  "connections": {
    "n8n": {
      "main": [
        [
          {
            "node": "Derive Filename From Workflow Name",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Globals": {
      "main": [
        [
          {
            "node": "Fetch List of Existing Files",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "Globals",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Skip Unchanged Files": {
      "main": [
        [
          {
            "node": "Edit Existing File(s)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "File Exists in Gitlab?": {
      "main": [
        [
          {
            "node": "Fetch Existing File Content",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Create New File(s)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Backup Now - Manual Trigger": {
      "main": [
        [
          {
            "node": "Globals",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch Existing File Content": {
      "main": [
        [
          {
            "node": "Skip Unchanged Files",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch List of Existing Files": {
      "main": [
        [
          {
            "node": "Combine Gitlab Existing Files as Single List Item",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Derive Filename From Workflow Name": {
      "main": [
        [
          {
            "node": "File Exists in Gitlab?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Combine Gitlab Existing Files as Single List Item": {
      "main": [
        [
          {
            "node": "n8n",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Workflow n8n GitLab, gestion de fichiers : pour qui est ce workflow ?

Ce workflow s'adresse principalement aux équipes de développement et aux entreprises qui utilisent GitLab pour la gestion de leurs projets. Il est conçu pour des utilisateurs ayant un niveau technique intermédiaire, souhaitant automatiser leurs processus de sauvegarde et de gestion de fichiers.

Workflow n8n GitLab, gestion de fichiers : problème résolu

Ce workflow résout le problème de la gestion manuelle des fichiers sur GitLab, qui peut être chronophage et source d'erreurs. En automatisant la sauvegarde et l'édition de fichiers, il permet aux utilisateurs de gagner du temps et de se concentrer sur des tâches à plus forte valeur ajoutée. De plus, il réduit les risques liés à la perte de données et assure une meilleure organisation des projets.

Workflow n8n GitLab, gestion de fichiers : étapes du workflow

Étape 1 : le workflow est déclenché manuellement ou selon un calendrier.

  • Étape 1 : il récupère la liste des fichiers existants dans le dépôt GitLab.
  • Étape 2 : il vérifie si un fichier spécifique existe déjà.
  • Étape 3 : si le fichier existe, son contenu est récupéré, sinon un nouveau fichier est créé.
  • Étape 4 : les fichiers peuvent être modifiés selon les besoins.
  • Étape 5 : les fichiers sont ensuite sauvegardés ou mis à jour dans GitLab.

Workflow n8n GitLab, gestion de fichiers : guide de personnalisation

Pour personnaliser ce workflow, vous pouvez modifier le nœud 'Schedule Trigger' pour ajuster la fréquence des sauvegardes. Il est également possible de changer les paramètres dans les nœuds 'Create New File(s)' et 'Edit Existing File(s)' pour spécifier le contenu et le chemin des fichiers. Pensez à vérifier les droits d'accès sur votre dépôt GitLab pour assurer un fonctionnement optimal. Vous pouvez également intégrer d'autres outils ou services en ajoutant des nœuds supplémentaires selon vos besoins.