All posts by Mathieu VIDOT

12Juin/19
bluexml expert GED ECM BPM Gestion Documentaire_Alfresco_Bonita_YouSign_jenkins_mattermost

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.

 

02Mar/18
bluexml expert GED ECM BPM Gestion Documentaire_Alfresco_Docker Alfresco avec SSL

Conteneur Docker Alfresco avec SSL

Ceci est une petite note concernant la génération de conteneur Docker Alfresco. Pour d’autres logiciels, possédant par exemple des ports particuliers il conviendra d’adapter ces informations.
Afin d’utiliser un conteneur Alfresco en HTTPS, voici la configuration à passer à la commande “docker run” :

#!/bin/sh
docker run -it -d -v /data/mvico:/opt/alfresco/alf_data \
-e VIRTUAL_PROTO=https \
-e VIRTUAL_PORT=8443 \
-e VIRTUAL_HOST=mvico.docker.bluexml.com \
-e INITIAL_PASS=mvicoforever \
-e ALF_1=smart.folders.enabled.EQ.true \
-e ALF_2=alfresco.host.EQ.mvico.docker.bluexml.com \
-e ALF_3=alfresco.port.EQ.443 \
-e ALF_4=alfresco.protocol.EQ.https \
-e ALF_5=share.host.EQ.mvico.docker.bluexml.com \
-e ALF_6=share.port.EQ.443 \
-e ALF_7=share.protocol.EQ.https \
–name mvico-522 mvico-522:$BUILD_NUMBER

Note 1 : Les variables VIRTUAL_XXX servent à la configuration du vhost générée automatiquement par le proxy NGINX lors de chaque nouveau “run” de conteneur.
Voir conteneur NGINX proxy utilisé ici
Note 2 : Les variables ALF_XXX servent à la configuration du fichier “alfresco-global.properties” en accord avec le travail de Philippe Dubois (d’où le travail sur le changement de numéro de port)
Note 3 :  “.EQ.” signifie “=“. La substitution est effectuée pas NGINX lors de la génération du vhost.

Attention, dans Jenkins, onglet build du projet en question, par défaut il est nécessaire de mettre toute la commande sur un ligne; je vous l’accorde ce n’est pas hyper pratique ni lisible. L’éditeur ne gérant pas les sauts de ligne dans la commande. Il y a possibilité de scinder la commande en ajoutant “#!/bin/sh” au début du script et en ajoutant ” \” à chaque fin de ligne où la commande se poursuit. Ceci force l’outil d’intégration continue à exécuter la commande comme dans un script shell.

J’ajouterais enfin que pour l’édition en ligne, ne pas oublier d’ajouter la propriété aos.baseUrlOverwrite (pour cet exemple) (et en remplaçant le “=” par “.EQ.” bien sûr 😉 ). Sans cela Alfresco insérera le port 8443 dans l’URL AOS et le document ne sera pas ouvert par Office.

Je terminerais en précisant s’il est nécessaire que dans cette installation, et vous l’aurez sans doute compris, nous avons plusieurs conteneurs Docker qui interagissent : celui d’Alfresco et ceux d’NGINX.

Hope this helps.