Workflow n8n

Automatisation GitLab avec n8n : gestion des merge requests

  • Ce workflow n8n a pour objectif d'automatiser la gestion des merge requests sur GitLab, permettant ainsi aux équipes de développement de gagner du temps et d'améliorer leur efficacité. Grâce à cette automatisation n8n, les utilisateurs peuvent vérifier l'existence d'une merge request, en créer de nouvelles, et ajouter des notes personnalisées, le tout sans intervention manuelle. Cela est particulièrement utile dans des environnements où les mises à jour fréquentes et les validations rapides sont essentielles pour le bon déroulement des projets.
  • Le workflow débute par un déclencheur programmé qui active le processus à intervalles réguliers. Ensuite, il utilise un nœud HTTP pour vérifier si une merge request existe déjà. Si elle existe, le workflow passe à la fermeture de cette demande via une autre requête HTTP. Dans le cas contraire, il crée une nouvelle merge request. Un traitement par lot permet de gérer plusieurs éléments simultanément, ce qui optimise le temps de traitement. Après avoir ajouté des notes personnalisées, le workflow attend 30 secondes pour que la pipeline se termine avant de procéder à la fusion, garantissant ainsi que toutes les vérifications sont complètes.
  • Les bénéfices business de ce workflow sont significatifs. En automatisant ces tâches répétitives, les équipes peuvent se concentrer sur des tâches à plus forte valeur ajoutée, réduire les risques d'erreurs humaines et améliorer la collaboration au sein des équipes de développement. Cette solution permet également de standardiser le processus de gestion des merge requests, ce qui contribue à une meilleure qualité de code et à une réduction des délais de livraison.
Tags clés :automatisationGitLabworkflown8ndéveloppement
Catégorie: Scheduled · Tags: automatisation, GitLab, workflow, n8n, développement0

Workflow n8n GitLab, développement : vue d'ensemble

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

Workflow n8n GitLab, développement : détail des nœuds

  • API to Check existing merge request

    Ce noeud effectue une requête HTTP pour vérifier l'existence d'une demande de fusion.

  • Is Exists

    Ce noeud évalue une condition pour déterminer si une action doit être effectuée.

  • Create New Merge Request

    Ce noeud crée une nouvelle demande de fusion en effectuant une requête HTTP.

  • Loop Over Items

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

  • API to CLOSE existing Merge Request

    Ce noeud effectue une requête HTTP pour fermer une demande de fusion existante.

  • Add Custom Notes To Merge Request

    Ce noeud ajoute des notes personnalisées à une demande de fusion via une requête HTTP.

  • 30 secs wait to approve merge request and pipeline to finish1

    Ce noeud introduit une pause de 30 secondes pour permettre l'approbation de la demande de fusion et l'achèvement du pipeline.

  • Merge When Pipeline Succeeds

    Ce noeud effectue une requête HTTP pour fusionner lorsque le pipeline réussit.

  • setValueForMerge

    Ce noeud définit des valeurs pour la demande de fusion en utilisant des assignations.

  • Schedule Trigger

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

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

Inscription gratuite

S'inscrire gratuitementBesoin d'aide ?
{
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "b9a807c3-5847-477a-a242-2fdf5b15ba7e",
      "name": "API to Check existing merge request",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -840,
        -20
      ],
      "parameters": {
        "url": "=https://gitlab.com/<projectid>/merge_requests",
        "options": {
          "allowUnauthorizedCerts": false
        },
        "sendQuery": true,
        "sendHeaders": true,
        "queryParameters": {
          "parameters": [
            {
              "name": "state",
              "value": "opened"
            },
            {
              "name": "source_branch",
              "value": "=sourceBranchName"
            }
          ]
        },
        "headerParameters": {
          "parameters": [
            {
              "name": "PRIVATE-TOKEN",
              "value": "=gitlabToken"
            }
          ]
        }
      },
      "typeVersion": 4.2,
      "alwaysOutputData": true
    },
    {
      "id": "42270a5a-d696-44f3-b2f5-16b2ddb3488c",
      "name": "Is Exists",
      "type": "n8n-nodes-base.if",
      "position": [
        -660,
        -20
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "d895b8cc-5679-442f-a1bf-d8375174a24b",
              "operator": {
                "type": "boolean",
                "operation": "true",
                "singleValue": true
              },
              "leftValue": "={{ $node[\"API to Check existing merge request\"].data.isEmpty() }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "d380c943-0525-4976-9e70-c90de1177f0c",
      "name": "Create New Merge Request",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -440,
        -200
      ],
      "parameters": {
        "url": "=https://gitlab.com/<projectid>/merge_requests",
        "method": "POST",
        "options": {
          "allowUnauthorizedCerts": false
        },
        "sendBody": true,
        "contentType": "form-urlencoded",
        "sendHeaders": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "source_branch",
              "value": "=sourceBranchName"
            },
            {
              "name": "target_branch",
              "value": "=targetBranchName"
            },
            {
              "name": "title",
              "value": "=mergeTitle"
            }
          ]
        },
        "headerParameters": {
          "parameters": [
            {
              "name": "PRIVATE-TOKEN",
              "value": "=gitlabToken"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "600a0ed5-cb68-4479-8aee-55b55f0d8630",
      "name": "Loop Over Items",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -440,
        160
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "555643cb-761c-41ec-b983-8e0194851a8d",
      "name": "API to CLOSE existing Merge Request",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -220,
        180
      ],
      "parameters": {
        "url": "=https://gitlab.com/<projectid>/merge_requests/<merge_iid>",
        "method": "PUT",
        "options": {
          "allowUnauthorizedCerts": false
        },
        "sendBody": true,
        "contentType": "form-urlencoded",
        "sendHeaders": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "state_event",
              "value": "close"
            }
          ]
        },
        "headerParameters": {
          "parameters": [
            {
              "name": "PRIVATE-TOKEN",
              "value": "=gitlabToken"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "0c94b06a-80e3-4e50-8bac-2bd4015f085e",
      "name": "Add Custom Notes To Merge Request",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -220,
        -200
      ],
      "parameters": {
        "url": "=https://gitlab.com/<projectid>/merge_requests/<merge_iid>/notes",
        "method": "POST",
        "options": {
          "allowUnauthorizedCerts": false
        },
        "sendBody": true,
        "contentType": "form-urlencoded",
        "sendHeaders": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "body",
              "value": "=<mergeComments>"
            }
          ]
        },
        "headerParameters": {
          "parameters": [
            {
              "name": "PRIVATE-TOKEN",
              "value": "=gitlabToken"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "8e849f4f-2a52-46ba-9e0a-17126a8d966c",
      "name": "30 secs wait to approve merge request and pipeline to finish1",
      "type": "n8n-nodes-base.wait",
      "position": [
        140,
        -200
      ],
      "webhookId": "ac7bb2de-2c6f-479a-8807-13a29d8eaf5e",
      "parameters": {
        "amount": 30
      },
      "typeVersion": 1.1
    },
    {
      "id": "05cca829-b2df-4c1e-9441-56349acc4a0d",
      "name": "Merge When Pipeline Succeeds",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        720,
        -200
      ],
      "parameters": {
        "url": "=https://gitlab.com/<projectid>/merge_requests/<merge_iid>/merge",
        "method": "PUT",
        "options": {
          "allowUnauthorizedCerts": false
        },
        "jsonBody": "={\n\"merge_when_pipeline_succeeds\": {{ $('setValueForMerge').item.json.merge_when_pipeline_succeeds }},\n  \"should_remove_source_branch\": {{ $('setValueForMerge').item.json.should_remove_source_branch }}\n}",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "headerParameters": {
          "parameters": [
            {
              "name": "PRIVATE-TOKEN",
              "value": "=gitlabToken"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "e3ce9cdc-5484-4b4b-8701-6b9089a1f76d",
      "name": "setValueForMerge",
      "type": "n8n-nodes-base.set",
      "position": [
        460,
        -200
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "a22922c7-0c69-4ac1-bd15-4d289fa57737",
              "name": "merge_when_pipeline_succeeds",
              "type": "boolean",
              "value": false
            },
            {
              "id": "17580668-84d9-4ad6-b93b-e7b6c9c0f8ea",
              "name": "should_remove_source_branch",
              "type": "boolean",
              "value": true
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "0d49ec98-4806-492e-a6c2-a298ed8bb11a",
      "name": "Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -1160,
        -20
      ],
      "parameters": {
        "rule": {
          "interval": [
            {}
          ]
        }
      },
      "typeVersion": 1.2
    }
  ],
  "pinData": {},
  "connections": {
    "Is Exists": {
      "main": [
        [
          {
            "node": "Create New Merge Request",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Items": {
      "main": [
        [
          {
            "node": "API to Check existing merge request",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "API to CLOSE existing Merge Request",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "API to Check existing merge request",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "setValueForMerge": {
      "main": [
        [
          {
            "node": "Merge When Pipeline Succeeds",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create New Merge Request": {
      "main": [
        [
          {
            "node": "Add Custom Notes To Merge Request",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Add Custom Notes To Merge Request": {
      "main": [
        [
          {
            "node": "30 secs wait to approve merge request and pipeline to finish1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "API to CLOSE existing Merge Request": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "API to Check existing merge request": {
      "main": [
        [
          {
            "node": "Is Exists",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "30 secs wait to approve merge request and pipeline to finish1": {
      "main": [
        [
          {
            "node": "setValueForMerge",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Workflow n8n GitLab, développement : pour qui est ce workflow ?

Ce workflow s'adresse principalement aux équipes de développement logiciel utilisant GitLab, ainsi qu'aux entreprises cherchant à optimiser leur processus de gestion de code. Il est conçu pour des utilisateurs ayant un niveau technique intermédiaire et souhaitant automatiser leurs flux de travail pour gagner en efficacité.

Workflow n8n GitLab, développement : problème résolu

Ce workflow résout le problème de la gestion manuelle des merge requests sur GitLab, qui peut être chronophage et source d'erreurs. En automatisant ce processus, les utilisateurs éliminent les frustrations liées à la vérification et à la création de merge requests, réduisant ainsi le temps d'attente et les risques de conflits de code. À l'issue de cette automatisation, les équipes bénéficient d'un processus plus fluide et d'une meilleure coordination dans leurs projets de développement.

Workflow n8n GitLab, développement : étapes du workflow

Étape 1 : Le workflow est déclenché selon un calendrier prédéfini.

  • Étape 1 : Une requête HTTP vérifie l'existence d'une merge request.
  • Étape 2 : Si la merge request existe, elle est fermée via une autre requête HTTP.
  • Étape 3 : Si elle n'existe pas, une nouvelle merge request est créée.
  • Étape 4 : Les éléments sont traités par lot pour optimiser le flux.
  • Étape 5 : Des notes personnalisées sont ajoutées à la merge request.
  • Étape 6 : Une attente de 30 secondes est mise en place pour permettre à la pipeline de se terminer.
  • Étape 7 : Enfin, la merge request est fusionnée si la pipeline réussit.

Workflow n8n GitLab, développement : guide de personnalisation

Pour personnaliser ce workflow, vous pouvez modifier l'URL des requêtes HTTP pour qu'elles pointent vers votre instance GitLab. Assurez-vous également d'ajuster les paramètres de la merge request, tels que le titre et la description, selon vos besoins. Vous pouvez intégrer d'autres outils en ajoutant des nœuds supplémentaires pour enrichir le workflow. Pensez à sécuriser les accès API avec des tokens appropriés et à monitorer le flux pour détecter d'éventuelles erreurs.