Gitlab — mettre en place un webhook en quelques secondes

miary.dev
3 min readAug 14, 2019

Un webhook est une méthode permettant d’ajouter ou de modifier le comportement d’une page grâce à un retour d’appel ( callback). Le format est le JSON et la requête utilisée est la méthode POST.

Dans le cas de gitlab ou de github, un webhook est utilisé par exemple pour déclencher un événement suite à un nouveau push dans un repository ou à la création d’une issue ( report d’une anomalie). Cet événement lance une URL ajoutée dans gitlab en utilisant la méthode POST.

Pré-requis pour la mise en place d’un webhook dans gitlab :

  • Créer ou choisir un repository dans gitlab
  • Créer ou utiliser une url qui accepte la méthode POST

Nous allons partir d’un repository déja créé dans Gitlab.

  • Dans projet > Settings > Intégrations >
  • Dans le champ URL: saisissons l’URL du webhook: exemple — https://monsite.com/githooks.php
  • Cochons les cases suivantes :
  • “Push events
  • “Merge request events
  • Enable SSL verification
  • Et cliquons sur “ SAVE

L’objectif du script githooks.php est de faire une mise à jour du dossier en faisant un pull du repository gitlab.

Ce script peut être appelée de 3 façons:

  • Via gitlab en http suite à un push
  • Via GET par un utilisateur qui connait l’URL
  • Via la ligne de commande qui éxecute la commande git pull

Voici le code complet du script

https://gist.github.com/rabehasy/04710fc30cc058e62748302aa6c26f9c

Appel de gitlab en http suite à un push

Il s’agit des lignes : L23 — L47. Le script ne fait pas grand chose de très intéressant à part :

  • Enregistrer la requete dans un dossier temporaire et dans un fichier texte.
  • Envoie un mail à mon adresse.

GET par un utilisateur qui connait l’URL

Il s’agit de la ligne L 50 . Cette ligne affiche un texte

ligne de commande qui éxecute la commande git pull

Dans un premier temps, je me connecte en SSH sur le serveur. Je crée ensuite un cron qui appelle ce script toutes les minutes en utilisant l’utilitaire php. Voici la ligne du crontab

Lignes du script: L11–21

Si le fichier texte existe dans le dossier temporaire lorsque gitlab a appelé le hook, alors la commande suivante est lancée :

  • Je vais dans le dossier /home/web/miaryrabs/ qui est le dossier de mon site par exemple
  • Je lance la commande git pull gitlab master car je veux mettre à jour les dossiers/fichiers de mon site à partir des fichiers que je viens de “pusher” dans mon repository.
  • Je supprime le contenu de mon dossier temporaire pour éviter les boucles infinies au prochain lancement du crontab.

On a cécrit les manipulations à faire dans le cadre d’une création d’un webhook pour un repository gitlab. Il en est de même pour un projet github. Le principe reste le même. Les champs peuvent différer. Cela sera l’objet d’un autre article.

A bientôt ;)

Originally published at https://passions.miary.dev on August 14, 2019.

--

--