Comment créer une boîte de notification de compilation avec Raspberry Pi

Avez-vous toujours pensé qu'il serait amusant d'avoir quelque chose qui joue un son chaque fois qu'une construction échoue ou que le déploiement se termine? L’avoir sur votre ordinateur local peut être amusant, mais ne serait-ce pas formidable s’il s’agissait d’un appareil à part entière (peut-être même connecté à un écran). Dans cet article, je montre comment utiliser un Raspberry Pi connecté à certains haut-parleurs, au cloud et à du code Node.js pour faire exactement cela. Vous pouvez trouver le code fini sur GitHub ici:

https://github.com/matthewbill/mdb-build-notification

Cet article est la rédaction d'un exposé présenté au groupe d'utilisateurs du nœud Norwich. Si vous souhaitez que je fasse une conférence lors de l'un de vos événements, contactez-nous. Les diapositives de cette conférence sont disponibles ici:

Projets de construction / piratage

Comme avec tout type de projet de piratage informatique, nous finirons par apprendre un tas de compétences différentes en cours de route. Dans cet article, nous étudierons les sujets suivants:

  • Tarte aux framboises
  • AWS CLI
  • Test à la parole (par exemple)
  • Hébergement Web (express)
  • Architectures basées sur des événements découplés (SQS)
  • Applications Node Bin
  • Processeurs d'événements
  • Outils CI / CD

Pour cette application simple, nous avons décidé de le faire dans le cadre d'un projet à l'heure du déjeuner afin d'aider un nouveau membre de l'équipe à en savoir plus sur le nœud et AWS. Ces types de projets peuvent être un excellent moyen d'apprendre et de s'amuser en même temps.

Le Raspberry Pi

Un petit ordinateur abordable que vous pouvez utiliser pour apprendre la programmation
https://www.raspberrypi.org/

Un Raspberry Pi est essentiellement un mini-ordinateur super bon marché, qui tient dans la main et peut être branché à tout type d’électronique via une rangée de broches d’entrée / sortie à usage général (GPIO). Ceci est similaire à un autre appareil appelé l'arduino, qui vaut certainement la peine d'être vérifié à un moment donné aussi. Il peut utiliser Raspbian comme système d’exploitation, qui est un système d’exploitation basé sur Debian. Étant basé sur Linux, il peut exécuter tous les outils de programmation auxquels vous pouvez vous attendre, y compris python et, dans notre cas, noeud.

Vous pouvez vous procurer un kit de démarrage Raspberry Pi, comprenant le câble d’alimentation et une carte mémoire avec Raspbian, préinstallé pour 50 £ à 60 £. Cela en fait un petit appareil fantastique pour jouer avec toutes les idées IoT ou électroniques que vous pourriez avoir. Pour nous, nous pouvons connecter certains orateurs et envoyer des notifications au bureau avec une application pour nœud simple.

Vous pouvez toutefois exécuter l’application décrite dans cet article sur votre ordinateur ou sur n’importe quel ancien ordinateur du bureau. C’est la beauté du nœud qui est si multiplateforme. Si vous envisagez de le faire, vous pouvez ignorer les sections de Raspberry Pi et aller directement à la section ‘Lecture des sons’.

Si vous souhaitez approfondir la question des pi, W3schools.com propose un excellent didacticiel sur la manière d'utiliser pleinement un pi et d'accéder aux broches GPIO. Vous n'êtes limité que par votre imagination sur ce que vous pouvez construire!

Bits Raspberry Pi

Vous aurez besoin des éléments suivants pour que votre Raspberry Pi puisse exécuter notre application:

  • Le pi lui-même
  • Câble d'alimentation
  • Carte mémoire installée avec Raspbian
  • Câble HDMI et un certain type d'affichage
  • [Facultatif] Haut-parleurs et câble audio, si le son n'est pas diffusé via HDMI

Installation du nœud

L'une des premières choses à faire est d'installer un nœud sur notre pi. Étant basé sur Linux, vous pouvez l'installer en utilisant apt-get. Plutôt que d’entrer dans les détails de cet article, w3schools.com propose déjà un excellent guide étape par étape:

https://www.w3schools.com/nodejs/nodejs_raspberrypi.asp

Vous pouvez en savoir plus sur l’installation de noeud sur différents périphériques / os ici:

https://nodejs.org/en/download/

Jouer des sons

L'une des premières choses à configurer est la possibilité pour notre application de jouer des sons. Il y a deux options principales pour cela, nous pouvons avoir des sons réenregistrés ou utiliser la synthèse vocale. L’approche de synthèse vocale nous permettra d’envoyer tout type de message (tel que le nom de l’application / numéro de déploiement), nous allons donc utiliser cette approche. Heureusement pour nous, il existe un joli petit paquet appelé ‘say’, qui utilisera n’importe quelle bibliothèque text-to-speech se trouvant sur le système d’exploitation en cours d’exécution:

npm install say

Si vous utilisez Windows ou Mac, vous aurez automatiquement une bibliothèque de synthèse vocale. Si vous utilisez Linux ou dans notre cas un Raspian, vous devrez installer festival.

sudo apt-get installer festival festvox-kallpc16k

Pour l'instant, nous ne faisons qu'installer une seule voix pour que nous puissions fonctionner, mais vous voudrez peut-être revenir en arrière et explorer les autres. Nous pouvons ajouter la classe suivante, qui prendra du texte et le jouera pour nous en utilisant say.

Si vous l’essayez sur différents systèmes d’exploitation, vous constaterez que la synthèse vocale windows et mac est nettement supérieure à celle de son équivalent Linux. Sous Linux, ça sonne un peu… robotique!

Remarque: une autre option pourrait consister à utiliser un service de synthèse vocale basé sur un nuage, tel qu'Amazon Polly. Cela nécessiterait cependant une complexité supplémentaire, une charge réseau et une lenteur accrue dans notre cas d'utilisation. Restons simples, stupides (KISS).

Raspberry Pi Audio

Parfois, vous pourriez avoir des problèmes d’audio sur votre Raspberry Pi. Pour vérifier qu'il fonctionne correctement, il suffit de lire une simple vidéo youtube. S'il n'y a pas de son, c'est probablement l'une des deux choses.

  1. La mauvaise sortie (HDMI / Analog) est sélectionnée pour ce que vous avez branché.
  2. Vous utilisez HDMI et une petite configuration est requise:

Vous devrez modifier le fichier config.txt qui se trouve dans:

/boot/config.txt

Décommentez «hdmi_drive = 2» à l'intérieur de ce fichier et enregistrez-le. Vous pouvez facilement le faire via l'éditeur nano:

sudo nano /boot/config.txt

Vous devrez ensuite redémarrer votre pi

redémarrage sudo

Votre pi devrait maintenant être configuré pour reproduire le son via HDMI.

Création d'un noeud final

Maintenant que notre application joue du son, nous avons besoin d’un moyen d’envoyer des messages pour gêner (* tousser * .. je veux dire informer) de nos collègues. L’une des manières les plus simples de procéder consiste à configurer un point de terminaison HTTP à l’aide de express, qui appelle notre lecteur audio.

Après avoir démarré cette application, nous pouvons maintenant naviguer vers notre point de terminaison pour envoyer un message:

localhost: 3000 / say? message = Bonjour le monde

Vient maintenant le moment amusant, où vous pouvez donner l’IP du réseau local aux personnes de votre bureau et voir le type de messages qu’elles envoient à votre équipe. Oh, mais attendez, les travailleurs distants ne peuvent envoyer aucun message et notre serveur de construction n’est même pas sur notre réseau local. Nous avons besoin d'un nouveau plan rusé!

Architecture découplée

Nous avons besoin d'un moyen d'envoyer des messages à notre appareil depuis n'importe où dans le monde. Cela peut être fait de tant de façons différentes, mais en général, vous pouvez:

  • envoyer des messages à notre application
  • interrogez un type de terminal pour voir s’il ya des messages à lire.

Comme nous voulons garder notre application simple et ne pas payer pour tout type d’hébergement (pour utiliser des sockets web), nous allons utiliser la méthode des sondages.

SQS

Entrez AWS SQS ou ‘Simple Queue Service’, un service de file d’attente entièrement géré par Amazon, qui vous permet d’envoyer des messages à une extrémité de la file d’attente et de les lire à l’autre extrémité (comme Rabit MQ). Les gens de partout dans le monde peuvent envoyer des messages à la file d'attente. Notre application peut ensuite interroger cette file d'attente pour voir s'il y a des messages à lire.

Pour créer une nouvelle file d'attente SQS, connectez-vous simplement à la console AWS et accédez à la section SQS. Une fois là-bas, créez une file d'attente standard avec le nom que vous avez choisi et cliquez sur Création rapide de la file d'attente. Une fois que cela a été créé, vous pourrez le voir sur votre liste de files d’attente, ainsi que les détails de l’URL de la file d’attente (notez-le maintenant).

Configurer les informations d'identification AWS

Avant de commencer à parler à SQS, nous devrons configurer les informations d'identification AWS sur l'ordinateur qui exécutera notre application. Une des manières les plus simples de faire cela consiste à utiliser l'AWS CLI. Si vous travaillez pour la première fois avec AWS, vous pouvez en savoir plus sur la configuration des informations d'identification dans les documents AWS.

Il existe différentes manières d'installer l'AWS CLI, mais pour notre pi, le moyen le plus simple consiste à utiliser pip:

sudo pip installer awscli

Vous pouvez ensuite vous assurer qu'il est correctement installé en lançant:

aws - version

Pour configurer nos informations d'identification, exécutez la commande suivante et entrez vos informations de clé Access / Secret:

aws configurer

Pour en savoir plus sur l'installation de la CLI, vous pouvez consulter la documentation AWS ici: https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html

Le processeur

Maintenant que nous avons une file d'attente SQS créée et que nos informations d'identification locales sont configurées, nous devons créer un processeur à exécuter en arrière-plan pour vérifier périodiquement s'il y a de nouveaux messages. Pour simplifier le code à des fins de démonstration, nous appelons une classe «messageService», qui gère toutes les communications avec SQS.

Lorsqu'un nouveau message est détecté, nous utilisons le lecteur audio que nous avons créé précédemment pour lire le message qui passe. Nous supprimons enfin le message de la file d'attente afin de ne pas reproduire accidentellement le même message. Pour supprimer le message, nous utilisons le descripteur de réception du message reçu, qui sert d'identifiant unique. Enfin, nous définissons la méthode de processus à rappeler après un délai d’interrogation spécifié.

Installation

Nous avons donc créé notre application localement et elle fonctionne très bien, mais comment l’installer sur notre pi. Nous pourrions opter pour la copie des fichiers et l'exécuter en pointant sur le fichier… mais c'est une corvée! Au lieu de cela, nous pouvons tirer parti de la section bin de package.json.

Cela signifie que lorsque ce package est installé à l'aide de npm install, il lie automatiquement le fichier de script de noeud mdb-build-notification.js à la commande mdb-build-notification. Si nous publions notre package sur npm à l'aide de la commande npm publish, il sera disponible pour toute personne qui l'installera à l'aide de la commande suivante:

sudo npm installer mdb-build-notification -g

Le fichier binaire va maintenant exister globalement et nous pouvons l'exécuter comme s'il s'agissait d'une autre commande de la ligne de commande.

mdb-build-notification {endpointUrl} {pollDelay}

Ceci démarrera l'application en cours d'exécution pour notre point de terminaison SQS et débutera à présent la lecture des messages envoyés à votre file d'attente. Le pollDelay est en ms.

Mise à niveau

Avec cette approche, il est très facile de mettre à niveau si vous en avez besoin. Il suffit d’ajouter la balise @latest à la fin pour forcer l’installation de la dernière version.

sudo npm installer mdb-build-notification @ latest -g

Envoi de messages

Il existe différentes manières d’envoyer des messages à votre file d’attente SQS. Vous pouvez vous connecter à la console AWS et en envoyer un via l'interface graphique, utiliser l'AWS CLI (déjà utilisée pour configurer les informations d'identification) ou utiliser le kit AWS SDK pour JavaScript. Par exemple, pour envoyer un message via l'AWS CLI, utilisez simplement la commande suivante:

aws sqs send-message - queue-url {queueUrl} - corps du message «Build Complete»

Vous pouvez utiliser la même commande en tant qu’étape de génération dans vos générations Travis / Jenkins / Circle CI / etc pour envoyer un message après l’échec de votre construction ou la fin du déploiement. Vous devrez évidemment vous assurer que AWS CLI est installé sur votre serveur / conteneur de génération et que les informations d'identification sont définies.

Sommaire

Cette application simple est construite et prête à être utilisée. Vous pouvez vous lancer avec les étapes suivantes:

  1. Créer une file d'attente SQS dans AWS
  2. Configurez vos informations d'identification AWS
  3. Installer l'application
    sudo npm installer mdb-build-notification -g
  4. Lancer l'application
    mdb-build-notification {endpointUrl} {pollDelay}
  5. Commencez à envoyer des notifications de construction / déploiement

Vous êtes plus que bienvenu pour prendre le code et l'étendre pour vos propres besoins. Une fois encore, le code peut être trouvé sur GitHub:

https://github.com/matthewbill/mdb-build-notification

S'il vous plaît partager avec tous vos amis sur les médias sociaux et appuyez sur le bouton Clap ci-dessous pour passer le mot. Laissez une réponse nous indiquant lorsque votre outil de notification de génération est opérationnel.

Si vous avez aimé cet article, suivez-moi et consultez certains de mes autres articles.

À propos

Matthew Bill est un leader technique passionné et un passionné agile du Royaume-Uni. Il aime bouleverser le statu quo pour amener un changement transformationnel et une excellence technique. Avec une solide expérience technique en ingénierie logicielle Polyglot, il résout des problèmes complexes en utilisant des solutions innovantes et excelle dans la mise en œuvre de fortes cultures DevOps.

Il est un membre actif de la communauté technologique, écrit des articles, présente des exposés, contribue à l'open source et a cofondé le groupe d'utilisateurs de Norwich Node. Si vous souhaitez qu'il s'exprime lors d'une de vos conférences ou rédige un article pour votre publication, veuillez le contacter.

En savoir plus sur Matthew et ses projets sur matthewbill.gihthub.io.

Merci d'avoir lu!

Autres messages sur l'architecture que vous pourriez

Découvrez GitKraken, l'un des outils indispensables de 2019