Respaldo diario de flujos de trabajo a GitLab con notificación de Slack
Avanzado
Este es unautomatización que contiene 22 nodos.Utiliza principalmente nodos como If, N8n, Set, Code, Slack. Respaldo diario de flujos de trabajo a GitLab y envío de notificaciones a Slack
Requisitos previos
- •Bot Token de Slack o URL de Webhook
- •Personal Access Token de GitLab
Nodos utilizados (22)
Categoría
-
Vista previa del flujo de trabajo
Visualización de las conexiones entre nodos, con soporte para zoom y panorámica
Exportar flujo de trabajo
Copie la siguiente configuración JSON en n8n para importar y usar este flujo de trabajo
{
"meta": {
"instanceId": "cfcdd4aa7acb600106c0a4bff4e6959e8e3b32b3b8cbc7d93531b2a4c9012a32"
},
"nodes": [
{
"id": "05ee377d-5402-46ee-81b4-c56e6115ecd4",
"name": "Obtener todos los flujos de trabajo",
"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": "Descartar flujos archivados",
"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 a archivo",
"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 archivo 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": "Configuración",
"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": "Lista de nombres",
"type": "n8n-nodes-base.aggregate",
"position": [
-656,
16
],
"parameters": {
"options": {},
"fieldsToAggregate": {
"fieldToAggregate": [
{
"fieldToAggregate": "name"
}
]
}
},
"typeVersion": 1
},
{
"id": "5befe173-4171-4107-be94-4c5ad235ca76",
"name": "Crear archivo nuevo - 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": "Actualizar archivo - 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": "Listar todos los archivos - 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": "Activador diario",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-1136,
16
],
"parameters": {
"rule": {
"interval": [
{
"triggerAtHour": 12
}
]
}
},
"typeVersion": 1.2
},
{
"id": "de6637b3-1a90-4683-b785-ee168de26cbe",
"name": "Procesar cada archivo",
"type": "n8n-nodes-base.splitInBatches",
"position": [
-144,
16
],
"parameters": {
"options": {}
},
"typeVersion": 3
},
{
"id": "17b4693e-d52c-4f1a-97fa-2c42da170df3",
"name": "Eliminar campos no deseados",
"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": "Enviar mensaje al 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": "Archivo nuevo - Fallido",
"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": "Actualizar archivo - Fallido",
"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": "Nota adhesiva",
"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": "Nota adhesiva1",
"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": "Nota adhesiva2",
"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": "Nota adhesiva3",
"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": "Nota adhesiva4",
"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": "Nota adhesiva5",
"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": "Nota adhesiva6",
"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
}
]
]
}
}
}Preguntas frecuentes
¿Cómo usar este flujo de trabajo?
Copie el código de configuración JSON de arriba, cree un nuevo flujo de trabajo en su instancia de n8n y seleccione "Importar desde JSON", pegue la configuración y luego modifique la configuración de credenciales según sea necesario.
¿En qué escenarios es adecuado este flujo de trabajo?
Avanzado
¿Es de pago?
Este flujo de trabajo es completamente gratuito, puede importarlo y usarlo directamente. Sin embargo, tenga en cuenta que los servicios de terceros utilizados en el flujo de trabajo (como la API de OpenAI) pueden requerir un pago por su cuenta.
Flujos de trabajo relacionados recomendados
[Plantilla] Tienda de mascotas AI v8
🐶 Asistente de tienda de mascotas AI - Integrado con GPT-4o, Google Calendar y WhatsApp/Instagram/Facebook
If
N8n
Set
+
If
N8n
Set
244 NodosAmanda Benks
Ventas
agente de restaurante AI [plantilla]
🤖 asistente de restaurante AI para WhatsApp, Instagram y Messenger
If
N8n
Set
+
If
N8n
Set
239 NodosAmanda Benks
Otros
WordPress Blog Automation Pro (Investigación profunda) v2.1 Marketplace
Usar GPT-4o, Perplexity AI y soporte multilingüe para automatizar la creación de blogs optimizados para SEO
If
Set
Xml
+
If
Set
Xml
125 NodosDaniel Ng
Creación de contenido
Guarde sus flujos de trabajo en un repositorio de GitHub
Respaldo diario de flujos de trabajo a GitHub y envío de notificaciones a Slack
If
N8n
Set
+
If
N8n
Set
18 NodosAndrew
DevOps
Explorar nodos de n8n en la biblioteca de referencias visuales
Explorar nodos de n8n en la base de referencia visual
If
Ftp
Set
+
If
Ftp
Set
113 NodosI versus AI
Otros
Panel de sincronización de GitHub - V2
Panel de control de control de versiones de flujos de trabajo de GitHub con historial de confirmaciones y funcionalidad de reversión
If
N8n
Set
+
If
N8n
Set
94 NodosEduard
DevOps
Información del flujo de trabajo
Nivel de dificultad
Avanzado
Número de nodos22
Categoría-
Tipos de nodos12
Descripción de la dificultad
Autor
Enlaces externos
Ver en n8n.io →
Compartir este flujo de trabajo