Vérification automatique de l'existence de mises à jour

Picasoft administre plusieurs services, certains sont ouverts au public, d’autres non, certains sont mis à la dispositions d’autres organisations à titre gracieux, … Dans tous les cas, il faut mettre à jour régulièrement ces services pour éviter des problèmes évidents de sécurités, d’obsolescence ou pouvoir profiter des dernières fonctionnalités.

Vérifier à la main les dernières versions des logiciels est une tâche assez fastidieuse, c’est une tâche qu’on a tendance à vouloir automatiser, avec des systèmes de gestion de paquets par exemple, mais cela n’est pas faisable avec la manière dont est construite l’infrastructure de Picasoft.

Nous avons donc mis au point un petit bot qui récupère les différentes versions des logiciels que nous utilisons directement grâce aux API des forges logicielles qu’utilisent les développeurs des services que nous utilisons ou par un flux Atom quand cela n’est pas possible. Ensuite, à chaque nouvelle version le bot nous préviens de l’existence d’une mise à jour.

C’est un service dédié dans un conteneur dédié qui fait tourner le bot. Le service utilise supercronic pour vérifier régulièrement les sources, l’intervalle de vérification est paramétrable par la variable d’environnement CRON_UPDATE, il s’agit d’une chaîne de caractères au format cron qui représente la fréquence de répétition de la tâche.

Il faut ensuite permettre au bot de poster des message, on utilise pour cela un compte de bot sur Mattermost. Une fois créé le serveur vous indique un token qu’il faut garder précieusement et ajouter dans le fichier de secret du service. Pour que le bot soit pleinement fonctionnel il faut l’ajouter à l’équipe (en l’invitant) et dans le canal où vous souhaitez qu’il interagisse. Il faut aussi copier l’id du canal dans lequel il est censé interagir (visible dans les informations sur le canal) et le renseigner dans le fichier de secrets.

Les sources que le bot utilise pour récupérer les versions sont renseignées dans le fichier feeds.json, il s’agit d’une liste d’objets contenant tous quatre éléments :

  • id : un entier utilisé pour conserver les versions déjà explorées dans la base de données, il est unique et constant, il doit toujours être incrémenté, même si un ancien id n’est plus utilisé il vaut mieux ne pas le recycler
  • name : une chaîne de caractères qui correspond au nom du service qui sera affiché dans le message sur Mattermost, il peut être modifié voire même dupliqué si besoin sans problème
  • type : le type de la source au choix parmi github quand on utilise l’API GitHub, gitlab pour l’API GitLab, gitea pour l’API Gitea ou rss quand on renseigne l’adresse d’un flux Atom 2005
  • url : il peut s’agir soit de l’endpoint de l’API qui fourni les données au bot ou de l’adresse du flux Atom 2005

Pour trouver les adresses des API on peut regarder cette page pour GitHub, celle-ci pour GitLab ou bien celle-là pour Gitea.

Note:

Les développeurs des logiciels n’utilisent parfois pas ou pas bien les fonctionnalités de releases des forges, dans ces cas là l’utilisation des API n’est pas optimale, on préfèrera donc utiliser les flux Atom qui sont disponible dans GitHub (en regardant les sources de la page et en cherchant atom) ou GitLab

  • technique/adminsys/secu/services_updates.txt
  • de ppom