Automatische Sicherung von Workflows und Anmeldedaten auf GitHub (inkl. Änderungserkennung)
Experte
Dies ist ein DevOps-Bereich Automatisierungsworkflow mit 21 Nodes. Hauptsächlich werden If, Set, Crypto, Github, ReadWriteFile und andere Nodes verwendet. Automatische Sicherung von Workflows und Anmeldedaten bei GitHub (mit Änderungserkennung)
Voraussetzungen
- •GitHub Personal Access Token
Verwendete Nodes (21)
Kategorie
Workflow-Vorschau
Visualisierung der Node-Verbindungen, mit Zoom und Pan
Workflow exportieren
Kopieren Sie die folgende JSON-Konfiguration und importieren Sie sie in n8n
{
"meta": {
"instanceId": "558d88703fb65b2d0e44613bc35916258b0f0bf983c5d4730c00c424b77ca36a"
},
"nodes": [
{
"id": "6f0fcaed-fd41-4ac4-816d-41098539f42a",
"name": "Zeitplan-Trigger",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-1900,
-180
],
"parameters": {
"rule": {
"interval": [
{
"field": "hours"
}
]
}
},
"typeVersion": 1.2
},
{
"id": "1211ee7a-03d1-4a00-9759-bc0402d3686c",
"name": "Neuen Workflow-Hash abrufen",
"type": "n8n-nodes-base.executeWorkflow",
"position": [
-1020,
-280
],
"parameters": {
"options": {},
"workflowId": {
"__rl": true,
"mode": "list",
"value": "U7Jh9njKLEjGLVIl",
"cachedResultName": "n8n Backup Changes"
},
"workflowInputs": {
"value": {
"filePath": "={{ $('Set Workflow Path').item.json.filePath }}"
},
"schema": [
{
"id": "filePath",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "filePath",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"filePath"
],
"attemptToConvertTypes": false,
"convertFieldsToString": true
}
},
"typeVersion": 1.2,
"alwaysOutputData": false
},
{
"id": "d655d400-d743-4dd8-8b05-12701c8c4f9d",
"name": "Alten Workflow-Hash abrufen",
"type": "n8n-nodes-base.executeWorkflow",
"position": [
-1460,
-280
],
"parameters": {
"options": {},
"workflowId": {
"__rl": true,
"mode": "list",
"value": "U7Jh9njKLEjGLVIl",
"cachedResultName": "n8n Backup Changes"
},
"workflowInputs": {
"value": {
"filePath": "={{ $('Set Workflow Path').item.json.filePath }}"
},
"schema": [
{
"id": "filePath",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "filePath",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"filePath"
],
"attemptToConvertTypes": false,
"convertFieldsToString": true
}
},
"typeVersion": 1.2
},
{
"id": "0d13634a-f74a-4194-8a54-9531205d0883",
"name": "Workflow-Daten lesen",
"type": "n8n-nodes-base.readWriteFile",
"position": [
-580,
-280
],
"parameters": {
"options": {},
"fileSelector": "={{ $('Set Workflow Path').item.json.filePath }}"
},
"typeVersion": 1
},
{
"id": "cfa7d2e0-e63d-4392-899d-13fd2b587a15",
"name": "Workflow-Pfad setzen",
"type": "n8n-nodes-base.set",
"position": [
-1680,
-280
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "c60cce2a-609d-417e-a73c-9719a490cc85",
"name": "filePath",
"type": "string",
"value": "/data/shared/WorkFlowBackup.json"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "5b5250ed-c3de-431f-8e4b-c8b6a6352393",
"name": "Workflow-Sicherung ausführen",
"type": "n8n-nodes-base.executeCommand",
"position": [
-1240,
-280
],
"parameters": {
"command": "=n8n export:workflow --all --output={{ $('Set Workflow Path').item.json.filePath }}"
},
"typeVersion": 1,
"alwaysOutputData": true
},
{
"id": "510d346d-2eec-4839-aa99-6d61cc00573a",
"name": "Datei lesen",
"type": "n8n-nodes-base.readWriteFile",
"position": [
-1680,
-540
],
"parameters": {
"options": {},
"fileSelector": "={{ $json.filePath }}"
},
"typeVersion": 1
},
{
"id": "9ce2b61a-d4cd-46f5-a20b-02cbb864c259",
"name": "Daten extrahieren",
"type": "n8n-nodes-base.extractFromFile",
"position": [
-1460,
-540
],
"parameters": {
"options": {},
"operation": "text"
},
"typeVersion": 1
},
{
"id": "381e022a-f265-4a07-9a49-27f401cc08d3",
"name": "Daten hashen",
"type": "n8n-nodes-base.crypto",
"position": [
-1240,
-540
],
"parameters": {
"type": "SHA256",
"value": "={{$json.data}}",
"dataPropertyName": "hash"
},
"typeVersion": 1
},
{
"id": "73d5f6a5-a4ee-49f9-ba5f-2646887daf9b",
"name": "Hash-Ersteller",
"type": "n8n-nodes-base.executeWorkflowTrigger",
"position": [
-1900,
-540
],
"parameters": {
"workflowInputs": {
"values": [
{
"name": "filePath"
}
]
}
},
"typeVersion": 1.1
},
{
"id": "78bd1ed8-0c19-4106-ab84-1d25f0f4b806",
"name": "Workflow-Daten extrahieren",
"type": "n8n-nodes-base.extractFromFile",
"position": [
-360,
-280
],
"parameters": {
"options": {},
"operation": "text"
},
"typeVersion": 1
},
{
"id": "740fd3e5-f356-436c-ad2b-86da10fb346d",
"name": "GitHub Workflow Backup",
"type": "n8n-nodes-base.github",
"onError": "continueRegularOutput",
"position": [
-140,
-280
],
"webhookId": "ccf2ad35-62aa-4e3e-9811-ea6d7fca0aba",
"parameters": {
"owner": {
"__rl": true,
"mode": "list",
"value": "nickmehr-hamed",
"cachedResultUrl": "https://github.com/nickmehr-hamed",
"cachedResultName": "nickmehr-hamed"
},
"filePath": "={{ \"backups/WorkFlow Backup \" + new Date($now).toISOString().replace('T', ' ').slice(0, 16) + \".json\" }}",
"resource": "file",
"repository": {
"__rl": true,
"mode": "url",
"value": "https://github.com/nickmehr-hamed/n8n"
},
"fileContent": "={{ $json.data }}",
"commitMessage": "={{ \"WorkFlow Backup \" + new Date($now).toISOString().replace('T', ' ').slice(0, 16) }}"
},
"credentials": {
"githubApi": {
"id": "4ZsFUnBi2lfVYEHW",
"name": "GitHub account"
}
},
"typeVersion": 1.1
},
{
"id": "dc2e73a2-36d8-4d92-947f-b3d01fac934d",
"name": "Neuen Credential-Hash abrufen",
"type": "n8n-nodes-base.executeWorkflow",
"position": [
-1020,
-80
],
"parameters": {
"options": {},
"workflowId": {
"__rl": true,
"mode": "list",
"value": "U7Jh9njKLEjGLVIl",
"cachedResultName": "n8n Backup Changes"
},
"workflowInputs": {
"value": {
"filePath": "={{ $('Set Credential Path').item.json.filePath }}"
},
"schema": [
{
"id": "filePath",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "filePath",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"filePath"
],
"attemptToConvertTypes": false,
"convertFieldsToString": true
}
},
"typeVersion": 1.2,
"alwaysOutputData": false
},
{
"id": "b5512300-5bb4-4781-9d5b-3b61a90d7220",
"name": "Alten Credential-Hash abrufen",
"type": "n8n-nodes-base.executeWorkflow",
"position": [
-1460,
-80
],
"parameters": {
"options": {},
"workflowId": {
"__rl": true,
"mode": "list",
"value": "U7Jh9njKLEjGLVIl",
"cachedResultName": "n8n Backup Changes"
},
"workflowInputs": {
"value": {
"filePath": "={{ $('Set Credential Path').item.json.filePath }}"
},
"schema": [
{
"id": "filePath",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "filePath",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"filePath"
],
"attemptToConvertTypes": false,
"convertFieldsToString": true
}
},
"typeVersion": 1.2
},
{
"id": "ef1807a5-8d7c-4d05-b819-a433d495ca36",
"name": "Credential-Daten lesen",
"type": "n8n-nodes-base.readWriteFile",
"position": [
-580,
-80
],
"parameters": {
"options": {},
"fileSelector": "={{ $('Set Credential Path').item.json.filePath }}"
},
"typeVersion": 1
},
{
"id": "ceaa31cb-bfff-43b6-9433-7d1e124d6d86",
"name": "Credential-Pfad setzen",
"type": "n8n-nodes-base.set",
"position": [
-1680,
-80
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "c60cce2a-609d-417e-a73c-9719a490cc85",
"name": "filePath",
"type": "string",
"value": "/data/shared/CredentialBackup.json"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "babf93ca-cd95-4a38-9ecc-c16ffbd48dc0",
"name": "Credential-Sicherung ausführen",
"type": "n8n-nodes-base.executeCommand",
"position": [
-1240,
-80
],
"parameters": {
"command": "=n8n export:credentials --all --output={{ $('Set Credential Path').item.json.filePath }}"
},
"typeVersion": 1,
"alwaysOutputData": true
},
{
"id": "d2c8c228-d276-44f7-831b-611d05610e8f",
"name": "Credential-Daten extrahieren",
"type": "n8n-nodes-base.extractFromFile",
"position": [
-360,
-80
],
"parameters": {
"options": {},
"operation": "text"
},
"typeVersion": 1
},
{
"id": "1f94c09d-26aa-444b-b607-1366b7ffc4d0",
"name": "GitHub Credential Backup",
"type": "n8n-nodes-base.github",
"onError": "continueRegularOutput",
"position": [
-140,
-80
],
"webhookId": "ccf2ad35-62aa-4e3e-9811-ea6d7fca0aba",
"parameters": {
"owner": {
"__rl": true,
"mode": "list",
"value": "nickmehr-hamed",
"cachedResultUrl": "https://github.com/nickmehr-hamed",
"cachedResultName": "nickmehr-hamed"
},
"filePath": "={{ \"backups/ Credential Backup \" + new Date($now).toISOString().replace('T', ' ').slice(0, 16) + \".json\" }}",
"resource": "file",
"repository": {
"__rl": true,
"mode": "url",
"value": "https://github.com/nickmehr-hamed/n8n"
},
"fileContent": "={{ $json.data }}",
"commitMessage": "={{ \" Credential Backup \" + new Date($today).toISOString().replace('T', ' ').slice(0, 16) }}"
},
"credentials": {
"githubApi": {
"id": "4ZsFUnBi2lfVYEHW",
"name": "GitHub account"
}
},
"typeVersion": 1.1
},
{
"id": "a1a606b2-a0d7-4d9c-98b1-4657b902fccd",
"name": "Wenn Workflow aktualisiert",
"type": "n8n-nodes-base.if",
"position": [
-800,
-280
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "c028ce1d-3fe9-4dc9-a3e9-296460e12c83",
"operator": {
"type": "string",
"operation": "notEquals"
},
"leftValue": "={{ $('Get New Workflow Hash').item.json.hash }}",
"rightValue": "={{ $('Get Old Workflow Hash').item.json.hash }}"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "a6809c8d-ccd9-4acf-9854-b6a36e74c439",
"name": "Wenn Credential aktualisiert",
"type": "n8n-nodes-base.if",
"position": [
-800,
-80
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "c028ce1d-3fe9-4dc9-a3e9-296460e12c83",
"operator": {
"type": "string",
"operation": "notEquals"
},
"leftValue": "={{ $('Get New Credential Hash').item.json.hash }}",
"rightValue": "={{ $('Get Old Credential Hash').item.json.hash }}"
}
]
}
},
"typeVersion": 2.2
}
],
"pinData": {},
"connections": {
"381e022a-f265-4a07-9a49-27f401cc08d3": {
"main": [
[]
]
},
"510d346d-2eec-4839-aa99-6d61cc00573a": {
"main": [
[
{
"node": "9ce2b61a-d4cd-46f5-a20b-02cbb864c259",
"type": "main",
"index": 0
}
]
]
},
"73d5f6a5-a4ee-49f9-ba5f-2646887daf9b": {
"main": [
[
{
"node": "510d346d-2eec-4839-aa99-6d61cc00573a",
"type": "main",
"index": 0
}
]
]
},
"9ce2b61a-d4cd-46f5-a20b-02cbb864c259": {
"main": [
[
{
"node": "381e022a-f265-4a07-9a49-27f401cc08d3",
"type": "main",
"index": 0
}
]
]
},
"6f0fcaed-fd41-4ac4-816d-41098539f42a": {
"main": [
[
{
"node": "cfa7d2e0-e63d-4392-899d-13fd2b587a15",
"type": "main",
"index": 0
},
{
"node": "ceaa31cb-bfff-43b6-9433-7d1e124d6d86",
"type": "main",
"index": 0
}
]
]
},
"cfa7d2e0-e63d-4392-899d-13fd2b587a15": {
"main": [
[
{
"node": "d655d400-d743-4dd8-8b05-12701c8c4f9d",
"type": "main",
"index": 0
}
]
]
},
"0d13634a-f74a-4194-8a54-9531205d0883": {
"main": [
[
{
"node": "78bd1ed8-0c19-4106-ab84-1d25f0f4b806",
"type": "main",
"index": 0
}
]
]
},
"a1a606b2-a0d7-4d9c-98b1-4657b902fccd": {
"main": [
[
{
"node": "0d13634a-f74a-4194-8a54-9531205d0883",
"type": "main",
"index": 0
}
]
]
},
"ceaa31cb-bfff-43b6-9433-7d1e124d6d86": {
"main": [
[
{
"node": "b5512300-5bb4-4781-9d5b-3b61a90d7220",
"type": "main",
"index": 0
}
]
]
},
"ef1807a5-8d7c-4d05-b819-a433d495ca36": {
"main": [
[
{
"node": "d2c8c228-d276-44f7-831b-611d05610e8f",
"type": "main",
"index": 0
}
]
]
},
"78bd1ed8-0c19-4106-ab84-1d25f0f4b806": {
"main": [
[
{
"node": "740fd3e5-f356-436c-ad2b-86da10fb346d",
"type": "main",
"index": 0
}
]
]
},
"1211ee7a-03d1-4a00-9759-bc0402d3686c": {
"main": [
[
{
"node": "a1a606b2-a0d7-4d9c-98b1-4657b902fccd",
"type": "main",
"index": 0
}
]
]
},
"d655d400-d743-4dd8-8b05-12701c8c4f9d": {
"main": [
[
{
"node": "5b5250ed-c3de-431f-8e4b-c8b6a6352393",
"type": "main",
"index": 0
}
]
]
},
"a6809c8d-ccd9-4acf-9854-b6a36e74c439": {
"main": [
[
{
"node": "ef1807a5-8d7c-4d05-b819-a433d495ca36",
"type": "main",
"index": 0
}
]
]
},
"5b5250ed-c3de-431f-8e4b-c8b6a6352393": {
"main": [
[
{
"node": "1211ee7a-03d1-4a00-9759-bc0402d3686c",
"type": "main",
"index": 0
}
]
]
},
"d2c8c228-d276-44f7-831b-611d05610e8f": {
"main": [
[
{
"node": "1f94c09d-26aa-444b-b607-1366b7ffc4d0",
"type": "main",
"index": 0
}
]
]
},
"dc2e73a2-36d8-4d92-947f-b3d01fac934d": {
"main": [
[
{
"node": "a6809c8d-ccd9-4acf-9854-b6a36e74c439",
"type": "main",
"index": 0
}
]
]
},
"b5512300-5bb4-4781-9d5b-3b61a90d7220": {
"main": [
[
{
"node": "babf93ca-cd95-4a38-9ecc-c16ffbd48dc0",
"type": "main",
"index": 0
}
]
]
},
"babf93ca-cd95-4a38-9ecc-c16ffbd48dc0": {
"main": [
[
{
"node": "dc2e73a2-36d8-4d92-947f-b3d01fac934d",
"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?
Experte - DevOps
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.
Verwandte Workflows
Automatisierte n8n-Workflow-Sicherung bei GitHub und Nachverfolgung von Löschvorgängen
Automatisches Backup von n8n-Workflows bei GitHub mit Tracking von Löschvorgängen
If
N8n
Set
+
If
N8n
Set
31 NodesMarcial Ambriz
DevOps
Bidirektionale Synchronisation von Typebot-Workflows mit GitHub unter Verwendung der Typebot-API
Bidirektionale Synchronisation von Typebot-Workflows mit GitHub unter Verwendung des Typebot-APIs
If
Set
Code
+
If
Set
Code
31 NodesMarcial Ambriz
DevOps
GitHub Synchronisations-Dashboard - V2
GitHub-Workflow-Versionskontroll-Dashboard mit Commit-Verlauf und Rollback-Funktion
If
N8n
Set
+
If
N8n
Set
94 NodesEduard
DevOps
n8n-Knoten in der visuellen Referenzbibliothek erkunden
Erkundung von n8n-Knoten in der visuellen Referenzbibliothek
If
Ftp
Set
+
If
Ftp
Set
113 NodesI versus AI
Sonstiges
AI-Medien mit ComfyUI generieren: Bilder, Videos, 3D und Audio-Brücken
KI-Medien mit ComfyUI generieren: Bilder, Videos, 3D und Audio-Brücken
If
Set
Code
+
If
Set
Code
51 NodesNielo
Design
Automatisierte Kubernetes-Tests mit Robot Framework, ArgoCD und vollem KinD-Lebenszyklus
Automatisierte Kubernetes-Tests auf Basis von Robot Framework, ArgoCD und einem vollständigen KinD-Lebenszyklus
If
Set
Gitlab
+
If
Set
Gitlab
73 NodesVigh Sandor
DevOps
Workflow-Informationen
Schwierigkeitsgrad
Experte
Anzahl der Nodes21
Kategorie1
Node-Typen10
Autor
Hamed Nickmehr
@hamed-nickmehrExterne Links
Auf n8n.io ansehen →
Diesen Workflow teilen