Bot Mattermost via curl depuis Jenkins

Ce billet de blog vous guidera dans la création d’une requête automatique qui vous permettra d’annoncer au canal Mattermost de votre choix qu’une nouvelle version de votre logiciel préféré vient d’être construite par Jenkins.

Pour information, il existe sur GITHUB un plugin pour Jenkins qui réalise ce travail mais la méthode livrée ici peut être adaptée pour tout autre flux d’information.

Préparation de Mattermost

Conditions préalables de réalisation :

Requête curl dans mon job Jenkins

Conditions de départ :

En admettant que le « job » jenkins vous fournisse par exemple des variables comme :

  • BUILD_URL (URL résultat de la construction dans Jenkins)
  • _PROJECT_VERSION (Version générée du logiciel)
  • _BRANCH_NAME (Nom de la branche GIT sur laquelle est hébergé le projet logiciel)
  • CHANNEL (Nom du canal Mattermost dans lequel Jenkins va communiquer)

Il vous faut vous rendre sur la page de configuration de votre projet Jenkins et ajouter une étape au build (si elle n’existe pas déjà) : « Exécuter un script shell »

C’est dans la zone de texte prévue à la définition du script shell qui vous allez définir la requête qui sera envoyée à Mattermost.

Note : vous pourriez également profiter de ce script pour initialiser les variables citées en exemple et bien plus encore.

Voici la requête à saisir, dans une variable dans un premier temps :

REQUETE="curl -i \
        -X POST \
        -H 'Content-Type: application/json' \
        -d '{ \
                \"channel\": \"$CHANNEL\", \
                \"icon_url\": \"https://www.mattermost.org/wp-content/uploads/2016/04/icon.png\", \
                \"attachments\": [{ \
                        \"fallback\": \"Nouvelle construction Jenkins\", \
                        \"color\": \"#FF8000\", \
                        \"text\": \"Informations sur la construction :\", \
                        \"author_name\": \"Jenkins\", \
                        \"author_icon\": \"https://myjenkins .com/url/vers/photo/jenkins.png\", \
                        \"author_link\": \"https://myjenkins.com/\", \
                        \"title\": \"Nouvelle version déployée\", \
                        \"title_link\": \"$BUILD_URL\", \
                        \"fields\": [{ \
                                  \"short\":true, \
                                  \"title\":\"Branche\", \
                                  \"value\":\"$_BRANCH_NAME\" \
                        }, \
                        { \
                                  \"short\":true, \
                                  \"title\":\"Version\", \
                                  \"value\":\"$_PROJECT_VERSION\" \
                        }, \
                        { \
                                \"short\":false, \
                                \"title\":\"Détails\", \
                                \"value\":\"$BUILD_URL\" \
                        }] \
        }] \
        }'\
        https://mymattermost.com/hooks/abcdefghijklmnop"

Elle sera exécutée dans un second temps grâce à la ligne suivante :

eval $REQUETE

Résultat : un beau post Mattermost

Désormais, si vous avez défini l’exécution de ce script en tout dernier lieu de la construction réussie, un message sera envoyé dans votre canal Mattermost préféré pour prévenir tous les participants qu’une nouvelle version est prête. Voici un aperçu de ce rendu :

Le rendu de ce message est donné à titre d’exemple. On peut imaginer fournir d’autres informations, une toute autre disposition des éléments, l’ajout d’images, …

Hope this helps.