Workflow n8n

Automatisation GitHub avec n8n : sauvegarde de workflows

Ce workflow n8n a pour objectif de sauvegarder automatiquement des workflows dans un dépôt GitHub, offrant ainsi une solution efficace pour la gestion des versions et la sécurité des données. Dans un contexte où la préservation des workflows est cruciale pour les équipes de développement et d'automatisation, ce processus permet de s'assurer que chaque modification est enregistrée et accessible. Les cas d'usage incluent la sauvegarde régulière des configurations de workflows, facilitant ainsi la récupération en cas de besoin.

  • Étape 1 : Le déclencheur de ce workflow est un 'Schedule Trigger', qui permet de programmer des sauvegardes à intervalles réguliers.
  • Étape 2 : Les données sont ensuite traitées à l'aide de plusieurs nœuds, notamment 'Globals' pour définir les variables nécessaires et 'Loop Over Items' pour itérer sur les éléments à sauvegarder.
  • Étape 3 : Des conditions sont mises en place avec les nœuds 'If' pour vérifier si un fichier doit être créé ou mis à jour.
  • Étape 4 : Selon le résultat des conditions, le workflow utilise les nœuds 'Create new file and commit' ou 'Update file content and commit' pour interagir avec l'API GitHub et effectuer les opérations nécessaires. Ce workflow n8n apporte une valeur ajoutée significative en réduisant le risque de perte de données et en améliorant la traçabilité des modifications, ce qui est essentiel pour toute équipe d'automatisation.
Tags clés :automatisationGitHubn8nsauvegardeworkflows
Catégorie: Scheduled · Tags: automatisation, GitHub, n8n, sauvegarde, workflows0

Workflow n8n GitHub, sauvegarde, workflows : vue d'ensemble

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

Workflow n8n GitHub, sauvegarde, workflows : détail des nœuds

  • GitHub

    Ce noeud interagit avec GitHub pour effectuer des opérations sur des fichiers dans un dépôt spécifié.

  • Globals

    Ce noeud permet de définir des variables globales qui peuvent être utilisées dans tout le workflow.

  • n8n

    Ce noeud exécute des actions spécifiques dans n8n en fonction des filtres et des options de requête définis.

  • Loop Over Items

    Ce noeud divise les éléments en plusieurs lots pour un traitement itératif.

  • If

    Ce noeud évalue des conditions pour déterminer le chemin à suivre dans le workflow.

  • If1

    Ce noeud évalue une autre condition pour orienter le flux de travail selon le résultat.

  • Code

    Ce noeud exécute du code JavaScript personnalisé pour traiter des données ou effectuer des calculs.

  • Create new file and commit

    Ce noeud crée un nouveau fichier dans un dépôt GitHub et y effectue un commit.

  • Update file content and commit

    Ce noeud met à jour le contenu d'un fichier existant dans un dépôt GitHub et y effectue un commit.

  • Schedule Trigger

    Ce noeud déclenche le workflow selon un calendrier défini.

  • Sticky Note

    Ce noeud crée une note autocollante avec un contenu et une hauteur spécifiés.

  • Sticky Note1

    Ce noeud crée une autre note autocollante avec des paramètres de hauteur et de contenu.

  • Sticky Note2

    Ce noeud génère une note autocollante supplémentaire avec des spécifications de hauteur et de contenu.

  • Sticky Note3

    Ce noeud crée une note autocollante avec des paramètres de hauteur et de contenu définis.

  • Sticky Note4

    Ce noeud génère une note autocollante avec des spécifications de hauteur et de contenu.

  • Sticky Note5

    Ce noeud crée une note autocollante avec un contenu et une hauteur spécifiés.

  • Sticky Note6

    Ce noeud génère une note autocollante avec des paramètres de hauteur et de contenu.

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

Inscription gratuite

S'inscrire gratuitementBesoin d'aide ?
{
  "name": "Backup workflows to git repository",
  "nodes": [
    {
      "id": "b09ae4c6-ad75-4b3b-a78a-4cc2d48b2d24",
      "name": "GitHub",
      "type": "n8n-nodes-base.github",
      "position": [
        -40,
        -20
      ],
      "parameters": {
        "owner": "={{$node[\"Globals\"].json[\"repo\"][\"owner\"]}}",
        "filePath": "={{$node[\"Globals\"].json[\"repo\"][\"path\"]}}{{$json[\"name\"]}}.json",
        "resource": "file",
        "operation": "get",
        "repository": "={{$node[\"Globals\"].json[\"repo\"][\"name\"]}}",
        "asBinaryProperty": false,
        "additionalParameters": {}
      },
      "credentials": {
        "githubApi": {
          "id": "lSdxakI6ik5M2np2",
          "name": "Shashikanth | GitHub account"
        }
      },
      "typeVersion": 1,
      "continueOnFail": true,
      "alwaysOutputData": true
    },
    {
      "id": "639582ef-f13e-4844-bd10-647718079121",
      "name": "Globals",
      "type": "n8n-nodes-base.set",
      "position": [
        -740,
        -100
      ],
      "parameters": {
        "values": {
          "string": [
            {
              "name": "repo.owner",
              "value": "shashikanth171"
            },
            {
              "name": "repo.name",
              "value": "n8n-backup"
            },
            {
              "name": "repo.path",
              "value": "workflows/"
            }
          ]
        },
        "options": {}
      },
      "typeVersion": 1
    },
    {
      "id": "9df89713-220e-43b9-b234-b8f5612629cf",
      "name": "n8n",
      "type": "n8n-nodes-base.n8n",
      "position": [
        -500,
        -100
      ],
      "parameters": {
        "filters": {},
        "requestOptions": {}
      },
      "credentials": {
        "n8nApi": {
          "id": "RgwFr3HsPUEjFJNO",
          "name": "n8n account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "43a60315-d381-4ac4-be4c-f6a158651a00",
      "name": "Loop Over Items",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -280,
        -100
      ],
      "parameters": {
        "options": {}
      },
      "executeOnce": false,
      "typeVersion": 3
    },
    {
      "id": "41a7da89-1c8c-4100-8c30-d0788962efc1",
      "name": "If",
      "type": "n8n-nodes-base.if",
      "position": [
        160,
        -20
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "16a9182d-059d-4774-ba95-654fb4293fdb",
              "operator": {
                "type": "string",
                "operation": "notExists",
                "singleValue": true
              },
              "leftValue": "={{ $json.error }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "ab9246eb-a253-4d76-b33b-5f8f12342542",
      "name": "If1",
      "type": "n8n-nodes-base.if",
      "position": [
        1040,
        260
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "e0c66624-429a-4f1f-bf7b-1cc1b32bad7b",
              "operator": {
                "type": "string",
                "operation": "notEquals"
              },
              "leftValue": "={{ $json.content }}",
              "rightValue": "={{ $('Loop Over Items').item.json.toJsonString() }}"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "72e4a5a4-6dfe-4b5c-b57b-7c1c9625e967",
      "name": "Code",
      "type": "n8n-nodes-base.code",
      "position": [
        720,
        -40
      ],
      "parameters": {
        "jsCode": "let items = $input.all()\n\nfor (item of items) {\n    item.json.content = Buffer.from(item.json.content, 'base64').toString('utf8')\n}\n\nreturn items;\n"
      },
      "typeVersion": 2
    },
    {
      "id": "68f14ac5-14d6-432e-9e6b-25df610eadac",
      "name": "Create new file and commit",
      "type": "n8n-nodes-base.github",
      "position": [
        340,
        140
      ],
      "parameters": {
        "owner": "={{$node[\"Globals\"].json[\"repo\"][\"owner\"]}}",
        "filePath": "={{$node[\"Globals\"].json[\"repo\"][\"path\"]}}{{ $('Loop Over Items').item.json.name }}.json",
        "resource": "file",
        "repository": "={{$node[\"Globals\"].json[\"repo\"][\"name\"]}}",
        "fileContent": "={{ $('Loop Over Items').item.json.toJsonString()  }}",
        "commitMessage": "=[N8N Backup] {{ $('Loop Over Items').item.json.name }}.json"
      },
      "credentials": {
        "githubApi": {
          "id": "lSdxakI6ik5M2np2",
          "name": "Shashikanth | GitHub account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "e50f00a3-292c-4285-b767-8d6ee4606575",
      "name": "Update file content and commit",
      "type": "n8n-nodes-base.github",
      "position": [
        1400,
        460
      ],
      "parameters": {
        "owner": "={{$node[\"Globals\"].json[\"repo\"][\"owner\"]}}",
        "filePath": "={{$node[\"Globals\"].json[\"repo\"][\"path\"]}}{{ $('Loop Over Items').item.json.name }}.json",
        "resource": "file",
        "operation": "edit",
        "repository": "={{$node[\"Globals\"].json[\"repo\"][\"name\"]}}",
        "fileContent": "={{ $('Loop Over Items').item.json.toJsonString()  }}",
        "commitMessage": "=[N8N Backup] {{ $('Loop Over Items').item.json.name }}.json"
      },
      "credentials": {
        "githubApi": {
          "id": "lSdxakI6ik5M2np2",
          "name": "Shashikanth | GitHub account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "4b2d375c-a339-404c-babd-555bd2fc4091",
      "name": "Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -960,
        -100
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "minutes"
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "ea026e96-0db1-41fd-b003-2f2bf4662696",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1560,
        480
      ],
      "parameters": {
        "height": 80,
        "content": "Workflow changes committed to the repository"
      },
      "typeVersion": 1
    },
    {
      "id": "9c402daa-6d03-485d-b8a0-58f1b65d396d",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1180,
        260
      ],
      "parameters": {
        "height": 80,
        "content": "Check if there are any changes in the workflow"
      },
      "typeVersion": 1
    },
    {
      "id": "1d9216d9-bf8d-4945-8a58-22fb1ffc9be8",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        460,
        160
      ],
      "parameters": {
        "height": 80,
        "content": "Create a new file for the workflow"
      },
      "typeVersion": 1
    },
    {
      "id": "60a3953b-d9f1-4afd-b299-e314116b96c6",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        160,
        -120
      ],
      "parameters": {
        "height": 80,
        "content": "Check if file exists in the repository"
      },
      "typeVersion": 1
    },
    {
      "id": "6df689fb-cb49-4634-9d1e-59648a1e7219",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        660,
        -140
      ],
      "parameters": {
        "height": 80,
        "content": "Convert the file contents to JSON string"
      },
      "typeVersion": 1
    },
    {
      "id": "f2340ad0-71a1-4c74-8d90-bcb974b8b305",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -560,
        -200
      ],
      "parameters": {
        "height": 80,
        "content": "Get all workflows"
      },
      "typeVersion": 1
    },
    {
      "id": "617bea19-341a-4e9d-b6fd-6b417e58d756",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -820,
        40
      ],
      "parameters": {
        "height": 80,
        "content": "Set variables"
      },
      "typeVersion": 1
    }
  ],
  "pinData": {},
  "connections": {
    "If": {
      "main": [
        [
          {
            "node": "Code",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Create new file and commit",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "If1": {
      "main": [
        [
          {
            "node": "Update file content and commit",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "n8n": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Code": {
      "main": [
        [
          {
            "node": "If1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "GitHub": {
      "main": [
        [
          {
            "node": "If",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Globals": {
      "main": [
        [
          {
            "node": "n8n",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Items": {
      "main": [
        [],
        [
          {
            "node": "GitHub",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "Globals",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create new file and commit": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update file content and commit": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Workflow n8n GitHub, sauvegarde, workflows : pour qui est ce workflow ?

Ce workflow s'adresse aux équipes de développement et d'automatisation, notamment dans les PME et les startups qui utilisent GitHub pour la gestion de leurs projets. Un niveau technique intermédiaire est recommandé pour la mise en place et la personnalisation de ce workflow.

Workflow n8n GitHub, sauvegarde, workflows : problème résolu

Ce workflow résout le problème de la perte potentielle de configurations de workflows en automatisant leur sauvegarde dans un dépôt GitHub. Les utilisateurs n'ont plus à se soucier de la gestion manuelle des versions, ce qui réduit les risques d'erreurs humaines et de pertes de données. Après la mise en place, les utilisateurs bénéficient d'une solution fiable pour conserver un historique de leurs workflows, facilitant ainsi la récupération et la collaboration.

Workflow n8n GitHub, sauvegarde, workflows : étapes du workflow

Étape 1 : Le workflow est déclenché par un 'Schedule Trigger' qui définit la fréquence des sauvegardes.

  • Étape 1 : Les variables nécessaires sont définies à l'aide du nœud 'Globals'.
  • Étape 2 : Les éléments à sauvegarder sont traités avec 'Loop Over Items'.
  • Étape 3 : Des conditions sont vérifiées avec les nœuds 'If' pour déterminer si un fichier doit être créé ou mis à jour.
  • Étape 4 : En fonction des résultats, le workflow utilise 'Create new file and commit' pour créer un nouveau fichier ou 'Update file content and commit' pour mettre à jour un fichier existant sur GitHub.

Workflow n8n GitHub, sauvegarde, workflows : guide de personnalisation

Pour personnaliser ce workflow, commencez par ajuster le 'Schedule Trigger' pour définir la fréquence de sauvegarde selon vos besoins. Modifiez les paramètres du nœud 'GitHub' pour spécifier le propriétaire du dépôt, le chemin du fichier et le message de commit. Vous pouvez également adapter les conditions dans les nœuds 'If' pour répondre à des critères spécifiques de votre projet. Enfin, assurez-vous que les autorisations d'accès à l'API GitHub sont correctement configurées pour permettre les opérations de création et de mise à jour de fichiers.