Sauvegarde quotidienne des workflows sur GitLab avec notification Slack
Avancé
Ceci est uncontenant 22 nœuds.Utilise principalement des nœuds comme If, N8n, Set, Code, Slack. Sauvegarde quotidienne du flux de travail vers GitLab et envoi d'une notification Slack
Prérequis
- •Token Bot Slack ou URL Webhook
- •Personal Access Token GitLab
Nœuds utilisés (22)
Catégorie
-
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
{
"meta": {
"instanceId": "cfcdd4aa7acb600106c0a4bff4e6959e8e3b32b3b8cbc7d93531b2a4c9012a32"
},
"nodes": [
{
"id": "05ee377d-5402-46ee-81b4-c56e6115ecd4",
"name": "Obtenir tous les workflows",
"type": "n8n-nodes-base.n8n",
"position": [
-496,
16
],
"parameters": {
"filters": {},
"requestOptions": {}
},
"credentials": {
"n8nApi": {
"id": "L1VsfzLKd4G6IpiP",
"name": "backup-internal"
}
},
"typeVersion": 1
},
{
"id": "f107d96b-26cf-47ad-97fc-83f64c7b621e",
"name": "Exclure les workflows archivés",
"type": "n8n-nodes-base.filter",
"position": [
-336,
16
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "3d21f751-35bf-439c-8536-ff5e8968672e",
"operator": {
"type": "boolean",
"operation": "false",
"singleValue": true
},
"leftValue": "={{ $json.isArchived }}",
"rightValue": "true"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "67333676-710a-4721-82a4-f9288366c6d0",
"name": "Convertir en fichier",
"type": "n8n-nodes-base.convertToFile",
"position": [
240,
112
],
"parameters": {
"mode": "each",
"options": {
"format": true
},
"operation": "toJson"
},
"typeVersion": 1.1
},
{
"id": "2d508a48-be41-40cd-be68-2aad83038cce",
"name": "Si fichier existe",
"type": "n8n-nodes-base.if",
"position": [
400,
112
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "9798deb6-300a-48ff-9f5c-a581b2d941a7",
"operator": {
"type": "array",
"operation": "contains",
"rightType": "any"
},
"leftValue": "={{ $('List of Names').item.json.name }}",
"rightValue": "={{ $('Process Each File').item.json.name }}"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "b816f0b9-26b1-438d-877a-d1d4ad86fe89",
"name": "Configuration",
"type": "n8n-nodes-base.set",
"position": [
-992,
16
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "558377f5-54a6-4dd2-872a-dd1fa8f1fc9f",
"name": "project_owner",
"type": "string",
"value": "PROJECT_OWNER e.g. mookielian"
},
{
"id": "063bbfbf-697e-4825-8c68-af5cc7b6aa2d",
"name": "project_name",
"type": "string",
"value": "PROJECT_NAME e.g. n8n"
},
{
"id": "7938d2e2-b203-45fc-8432-f9f3ac241946",
"name": "branch",
"type": "string",
"value": "main"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "517ef436-5323-4ffc-8ead-5c303930987e",
"name": "Liste des noms",
"type": "n8n-nodes-base.aggregate",
"position": [
-656,
16
],
"parameters": {
"options": {},
"fieldsToAggregate": {
"fieldToAggregate": [
{
"fieldToAggregate": "name"
}
]
}
},
"typeVersion": 1
},
{
"id": "5befe173-4171-4107-be94-4c5ad235ca76",
"name": "Créer un nouveau fichier - GitLab",
"type": "n8n-nodes-base.gitlab",
"onError": "continueErrorOutput",
"position": [
560,
192
],
"parameters": {
"owner": "={{ $('Configuration').item.json.project_owner }}",
"branch": "={{ $('Configuration').item.json.branch }}",
"filePath": "={{ $('Process Each File').item.json.name }}",
"resource": "file",
"binaryData": true,
"repository": "={{ $('Configuration').item.json.project_name }}",
"commitMessage": "=File created! {{ $('Process Each File').item.json.name }}"
},
"credentials": {
"gitlabApi": {
"id": "CV2TdcFVqfePX5QH",
"name": "GitLab Account"
}
},
"typeVersion": 1
},
{
"id": "20270a8c-ac47-4449-a506-618fe2362e17",
"name": "Mettre à jour le fichier - GitLab",
"type": "n8n-nodes-base.gitlab",
"onError": "continueErrorOutput",
"position": [
560,
0
],
"parameters": {
"owner": "={{ $('Configuration').item.json.project_owner }}",
"branch": "={{ $('Configuration').item.json.branch }}",
"filePath": "={{ $('Process Each File').item.json.name }}",
"resource": "file",
"operation": "edit",
"binaryData": true,
"repository": "={{ $('Configuration').item.json.project_name }}",
"commitMessage": "=File was updated! {{ $('Process Each File').item.json.name }}"
},
"credentials": {
"gitlabApi": {
"id": "CV2TdcFVqfePX5QH",
"name": "GitLab Account"
}
},
"typeVersion": 1
},
{
"id": "62bc4120-f641-456d-ae3c-2d450941ebe6",
"name": "Lister tous les fichiers - GitLab",
"type": "n8n-nodes-base.gitlab",
"position": [
-832,
16
],
"parameters": {
"owner": "={{ $('Configuration').item.json.project_owner }}",
"resource": "file",
"operation": "list",
"returnAll": true,
"repository": "={{ $('Configuration').item.json.project_name }}",
"additionalParameters": {}
},
"credentials": {
"gitlabApi": {
"id": "CV2TdcFVqfePX5QH",
"name": "GitLab Account"
}
},
"typeVersion": 1
},
{
"id": "2e8a6259-5530-4e15-babf-febbad2095ac",
"name": "Déclencheur quotidien",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-1136,
16
],
"parameters": {
"rule": {
"interval": [
{
"triggerAtHour": 12
}
]
}
},
"typeVersion": 1.2
},
{
"id": "de6637b3-1a90-4683-b785-ee168de26cbe",
"name": "Traiter chaque fichier",
"type": "n8n-nodes-base.splitInBatches",
"position": [
-144,
16
],
"parameters": {
"options": {}
},
"typeVersion": 3
},
{
"id": "17b4693e-d52c-4f1a-97fa-2c42da170df3",
"name": "Supprimer les champs inutiles",
"type": "n8n-nodes-base.code",
"position": [
64,
112
],
"parameters": {
"jsCode": "return $input.all().map(item => {\n const { createdAt, updatedAt, id, name, active, isArchived, ...rest } = item.json;\n return { json: rest };\n});"
},
"typeVersion": 2
},
{
"id": "d96386b2-75df-49c1-9645-f50a96c92d23",
"name": "Envoyer un message au canal",
"type": "n8n-nodes-base.slack",
"position": [
64,
-80
],
"webhookId": "7204c9cc-0e71-46ce-9760-3c49075bc472",
"parameters": {
"text": "=*Successful Backup!*\n\n- Execution ID: {{ $execution.id }}\n- Mode: {{ $execution.mode }}\n- Timestamp(Workflow Region): {{$now.toFormat('yyyy-MM-dd HH:mm:ss')}}",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "list",
"value": "C09KF70UXL3",
"cachedResultName": "backup-notifications"
},
"otherOptions": {
"includeLinkToWorkflow": false
}
},
"credentials": {
"slackApi": {
"id": "jkWLdvbGqIn5uLSh",
"name": "n8n-backup-bot-v2"
}
},
"executeOnce": true,
"typeVersion": 2.3
},
{
"id": "25cc4169-c68e-4ed8-a85c-43e432cf5dbf",
"name": "Nouveau fichier - Échec",
"type": "n8n-nodes-base.slack",
"position": [
752,
208
],
"webhookId": "5354db33-36b0-4f5b-ba5e-4d902660a1dd",
"parameters": {
"text": "=*Failed creating a new file - GitLab.*\n\n- File Name: {{ $('Process Each File').item.json.name }}\n- Error: {{ $json.error }}\n- Workflow State: _active={{ $('Process Each File').item.json.active }}_\n- Execution ID: {{ $execution.id }}\n- Mode: {{ $execution.mode }}\n- Timestamp(Workflow Region): {{$now.toFormat('yyyy-MM-dd HH:mm:ss')}}",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "list",
"value": "C09KF70UXL3",
"cachedResultName": "backup-notifications"
},
"otherOptions": {}
},
"credentials": {
"slackApi": {
"id": "jkWLdvbGqIn5uLSh",
"name": "n8n-backup-bot-v2"
}
},
"typeVersion": 2.3
},
{
"id": "2a2bad0d-af10-494b-aa21-48c2b1f277c3",
"name": "Mettre à jour le fichier - Échec",
"type": "n8n-nodes-base.slack",
"position": [
752,
16
],
"webhookId": "5354db33-36b0-4f5b-ba5e-4d902660a1dd",
"parameters": {
"text": "=*Failed updating specified file - GitLab.*\n\n- File Name: {{ $('Process Each File').item.json.name }}\n- Error: {{ $json.error }}\n- Workflow State: _active={{ $('Process Each File').item.json.active }}_\n- Execution ID: {{ $execution.id }}\n- Mode: {{ $execution.mode }}\n- Timestamp(Workflow Region): {{$now.toFormat('yyyy-MM-dd HH:mm:ss')}}",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "list",
"value": "C09KF70UXL3",
"cachedResultName": "backup-notifications"
},
"otherOptions": {}
},
"credentials": {
"slackApi": {
"id": "jkWLdvbGqIn5uLSh",
"name": "n8n-backup-bot-v2"
}
},
"typeVersion": 2.3
},
{
"id": "48ea9738-ef97-452b-b6ce-10db70d0920c",
"name": "Note adhésive",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1856,
-240
],
"parameters": {
"color": 4,
"width": 400,
"height": 704,
"content": "# Welcome\n\n## Summary of Nodes\n\n- Daily Trigger (Customizable)\n- Conf. (GitLab)\n- List All Files (Necessary for comparison)\n- List of Names (Turns all names into an array of single field)\n- Get All Workflows (JSON of all workflows, base code)\n- Discard Archived Workflows (Toggle of if you want to backup archived too)\n- Process Each File (Loop to execute nodes for each workflow)\n - Remove Unwanted Fields (Returns clean node code of the workflow)\n - Convert to File (Turns JSON code into a formatted file ready for upload)\n - If File Exists (Route into two path, Update or Create in GitLab)\n - Update File - GitLab (Updates existing file, no update if the file is the same)\n - Update File - Failed (Informs you on Slack about the file that failed)\n - Create New File - GitLab (Push new file to repo.)\n - New File - Failed (Informs you about failed file creation)\n- Send Message to Channel (Done branch of loop, success message)\n"
},
"typeVersion": 1
},
{
"id": "bbaad52a-b34c-4b43-aad2-cf187bf7c6be",
"name": "Note adhésive 1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1440,
-240
],
"parameters": {
"color": 5,
"width": 2608,
"height": 704,
"content": ""
},
"typeVersion": 1
},
{
"id": "a5eabdaa-c744-4272-868a-7a60740278b9",
"name": "Note adhésive 2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1856,
480
],
"parameters": {
"color": 6,
"width": 3024,
"height": 336,
"content": "# CREDENTIALS"
},
"typeVersion": 1
},
{
"id": "cdcf207f-0efd-4124-95b3-3d6a329e14c2",
"name": "Note adhésive 3",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1840,
576
],
"parameters": {
"width": 496,
"height": 176,
"content": "## Configuration Node\n\n- Create a project in GitLab.\n- Type the owner of the project as 'project_owner'.\n- Type the name of the project as 'project_name'.\n- Type the branch name. Will create a branch if main doesn't exist."
},
"typeVersion": 1
},
{
"id": "45f50d44-40c7-4e04-9e7f-36ee2cc075d4",
"name": "Note adhésive 4",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1328,
576
],
"parameters": {
"width": 480,
"height": 176,
"content": "## GitLab - [Docs](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.gitlab/)\n\n- Enter your project settings on GitLab Dashboard.\n- Go to access tokens page and create a new token.\n- Paste in your token in n8n credential and save.\n- No need to change the GitLab server parameter."
},
"typeVersion": 1
},
{
"id": "819a6463-8222-47e9-aca2-36e4f20e0489",
"name": "Note adhésive 5",
"type": "n8n-nodes-base.stickyNote",
"position": [
-832,
576
],
"parameters": {
"width": 496,
"height": 176,
"content": "## n8n Internal - [Docs](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.n8n/)\n\n- From left menu and bottom go to your user settings.\n- Go to API Keys page and create a new key.\n- Paste in the API Key in the credential page.\n- As base URL, enter your domain with '/api/v1' at the end and save."
},
"typeVersion": 1
},
{
"id": "ef82a762-7d0c-4928-a404-5a1f691aed71",
"name": "Note adhésive 6",
"type": "n8n-nodes-base.stickyNote",
"position": [
-320,
576
],
"parameters": {
"width": 1440,
"height": 176,
"content": "## Slack - [Docs](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.slack/)\n\n- Go to 'api.slack.com/apps' and create an account if you haven't already.\n- Create a new app in your workspace and go to OAuth screen from left menu.\n- Add a redirect URL which is your domain with this at the end: '/rest/oauth2-credential/callback'. In scopes section add these scopes as Bot Token Scopes: chat:write, channels:join, channels:read, groups:read... \n- From OAuth Tokens section copy bot token and paste as access token in n8n credential. From basic information page copy signature secret, paste in n8n credential and save."
},
"typeVersion": 1
}
],
"pinData": {},
"connections": {
"b816f0b9-26b1-438d-877a-d1d4ad86fe89": {
"main": [
[
{
"node": "62bc4120-f641-456d-ae3c-2d450941ebe6",
"type": "main",
"index": 0
}
]
]
},
"2e8a6259-5530-4e15-babf-febbad2095ac": {
"main": [
[
{
"node": "b816f0b9-26b1-438d-877a-d1d4ad86fe89",
"type": "main",
"index": 0
}
]
]
},
"517ef436-5323-4ffc-8ead-5c303930987e": {
"main": [
[
{
"node": "05ee377d-5402-46ee-81b4-c56e6115ecd4",
"type": "main",
"index": 0
}
]
]
},
"2d508a48-be41-40cd-be68-2aad83038cce": {
"main": [
[
{
"node": "20270a8c-ac47-4449-a506-618fe2362e17",
"type": "main",
"index": 0
}
],
[
{
"node": "5befe173-4171-4107-be94-4c5ad235ca76",
"type": "main",
"index": 0
}
]
]
},
"67333676-710a-4721-82a4-f9288366c6d0": {
"main": [
[
{
"node": "2d508a48-be41-40cd-be68-2aad83038cce",
"type": "main",
"index": 0
}
]
]
},
"05ee377d-5402-46ee-81b4-c56e6115ecd4": {
"main": [
[
{
"node": "f107d96b-26cf-47ad-97fc-83f64c7b621e",
"type": "main",
"index": 0
}
]
]
},
"25cc4169-c68e-4ed8-a85c-43e432cf5dbf": {
"main": [
[
{
"node": "de6637b3-1a90-4683-b785-ee168de26cbe",
"type": "main",
"index": 0
}
]
]
},
"de6637b3-1a90-4683-b785-ee168de26cbe": {
"main": [
[
{
"node": "d96386b2-75df-49c1-9645-f50a96c92d23",
"type": "main",
"index": 0
}
],
[
{
"node": "17b4693e-d52c-4f1a-97fa-2c42da170df3",
"type": "main",
"index": 0
}
]
]
},
"2a2bad0d-af10-494b-aa21-48c2b1f277c3": {
"main": [
[
{
"node": "de6637b3-1a90-4683-b785-ee168de26cbe",
"type": "main",
"index": 0
}
]
]
},
"20270a8c-ac47-4449-a506-618fe2362e17": {
"main": [
[
{
"node": "de6637b3-1a90-4683-b785-ee168de26cbe",
"type": "main",
"index": 0
}
],
[
{
"node": "2a2bad0d-af10-494b-aa21-48c2b1f277c3",
"type": "main",
"index": 0
}
]
]
},
"17b4693e-d52c-4f1a-97fa-2c42da170df3": {
"main": [
[
{
"node": "67333676-710a-4721-82a4-f9288366c6d0",
"type": "main",
"index": 0
}
]
]
},
"62bc4120-f641-456d-ae3c-2d450941ebe6": {
"main": [
[
{
"node": "517ef436-5323-4ffc-8ead-5c303930987e",
"type": "main",
"index": 0
}
]
]
},
"5befe173-4171-4107-be94-4c5ad235ca76": {
"main": [
[
{
"node": "de6637b3-1a90-4683-b785-ee168de26cbe",
"type": "main",
"index": 0
}
],
[
{
"node": "25cc4169-c68e-4ed8-a85c-43e432cf5dbf",
"type": "main",
"index": 0
}
]
]
},
"f107d96b-26cf-47ad-97fc-83f64c7b621e": {
"main": [
[
{
"node": "de6637b3-1a90-4683-b785-ee168de26cbe",
"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é ?
Avancé
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.
Workflows recommandés
[Modèle] AI Pet Shop v8
🐶 Assistant de magasin de pets IA - Intégration de GPT-4o, Google Calendar et WhatsApp/Instagram/Facebook
If
N8n
Set
+
If
N8n
Set
244 NœudsAmanda Benks
Ventes
Agent IA restaurant [Modèle]
🤖 Assistant IA pour WhatsApp, Instagram et Messenger
If
N8n
Set
+
If
N8n
Set
239 NœudsAmanda Benks
Autres
Version professionnelle de l'automatisation de blog WordPress (recherche approfondie) v2.1 sur le marché
Automatisation de la création de blog optimisé pour le SEO avec GPT-4o, Perplexity AI et support multilingue
If
Set
Xml
+
If
Set
Xml
125 NœudsDaniel Ng
Création de contenu
Enregistrez vos workflows dans un dépôt GitHub
Sauvegarde quotidienne du flux de travail vers GitHub et envoi d'une notification Slack
If
N8n
Set
+
If
N8n
Set
18 NœudsAndrew
DevOps
Explorer les nœuds n8n dans la bibliothèque de références visuelles
Explorer les nœuds n8n dans la base de références visuelles
If
Ftp
Set
+
If
Ftp
Set
113 NœudsI versus AI
Autres
Tableau de bord de synchronisation GitHub - V2
Tableau de versionning des workflows GitHub avec historique de commits et fonction de rollback
If
N8n
Set
+
If
N8n
Set
94 NœudsEduard
DevOps
Informations sur le workflow
Niveau de difficulté
Avancé
Nombre de nœuds22
Catégorie-
Types de nœuds12
Description de la difficulté
Auteur
Liens externes
Voir sur n8n.io →
Partager ce workflow