Automate everything!
Découvrez avec nous la magie de n8n
Florian Forestier
- Consultant Zenika ;
- Enseignant vacataire ISIMA ;
- Board Clermont'ech ;
Justine Bachelard
- Concepteur-Développeur @ BeYs Cloud ;
- Enseignant vacataire ISIMA ;
- Board Clermont'ech ;
n8n
- n8n = nodemation
- Moteur de workflow (successeur spirituel de iFTTT)
- Le principe est simple : on branche des blocs prédéfinis les uns à la suite des autres.
- Fourni avec des milliers de composants pour...
- ... se connecter un peu partout (GitLab, Telegram, etc)...
- ... et effectuer des actions (dédupliquer, envoyer une requête HTTP, etc)...
- ... Et on peut aussi ajouter du code personnalisé (en JS).
- n8n peut être utilisé pour automatiser des actions du quotidien, et même éviter de coder pour des cas basiques.
- Et on va voir quelques cas concrets ensemble. 👀
Veille technologique
-
Regrouper différentes sources d'informations sans l'effort d'aller les chercher individuellement
Veille technologique
Même principe pour tous :
-
Tous les X on déclenche un workflow
-
On récupère le flux RSS associé à notre source
-
On supprime les évènements qui ont déjà été process par les workflows d'avant
-
On envoie dans Discord via un sous-workflow
Veille technologique
Workflow générique qui nous permet de résumer et envoyer dans Discord :
-
On peut soit avoir un résumé manuel prédéfini, soit en faire faire un par Gemini
-
On utilise le noeud Summarization Chain avec les paramètres par défaut
-
On peut également choisir entre trier l'article automatiquement ou l'envoyer dans un channel prédéfini
-
Pour le tri, on se sert une nouvelle fois de Gemini pour trier les articles dans une des catégories prédéfinies (hardware, software, cloud, etc.)
-
On stocke dans une table tous les messages, et ils seront envoyés via un autre workflow
Veille technologique
Mise à jour automatique
- Problème sur notre infra @ home : les softs ne sont jamais mis à jour
- Car pas le temps / la motivation / l'envie, etc...
- => Risque de sécurité majeur, car on a des softs assez critiques ! (VaultWarden, Nextcloud, etc)
Mise à jour automatique
- Principe général :
- On regarde les releases sur GitHub (et pas sur DockerHub, car pas de flux RSS...)
- On compare les nouveaux tags, et on compare avec ceux du GitLab (bout de code JS)
- Si plus récent, on envoi un message de demande de validation sur Discord (pour garder le contrôle)
- Si oui, on déclenche une pipeline GitLab qui déploie la nouvelle version
(Et oui... n8n peut s'auto-update 👀)
Améliorations à faire
- Vous le savez... On aime ✨Docker Swarm✨
- Dans le futur, on veut rajouter un connecteur Swarm qui donne l'état du déploiement pour avoir un meilleur suivi
- On tente aussi de mettre de l'IA pour détecter les breaking changes dans le changelog, sans grand succès (pour l'instant)
Remplacer... Un bout de code !
Remplacer un bout de code
- Souvent, on a besoin d'écrire des bouts de code pour "gluer" des services entre eux
- Dans notre cas, stocker des métriques au format Prometheus dans une base de données
- ... Mais la giga-flemme d'installer un serveur Prometheus...
- ... Et certains de nos agents devaient être en "push", pas "pull".
- => n8n est la solution !
Remplacer un bout de code
-
Besoin : Analyse des places/vélos dispos sur les stations = à quelle heure il vaut mieux faire le trajet
-
Problème : les données sont sur opendata, mais pas celles passées
-
Workflow très simple :
-
On récupère les données
-
On sépare en items pour pouvoir les traiter individuellement
-
On ajoute la date actuelle et on insère dans le QuestDB
Remplacer un bout de code
Remplacer un bout de code
- Autre cas d'usage : nos capteurs de température
- De tout bêtes DHT22 sur des Pico à la maison => On a la flemme d'installer une DMZ, exposer un service, etc...
- Solution : Un workflow n8n qui se déclenche sur un Webhook ( = quand quelqu'un accède à une URL spécifique)
- Le RPi Pico envoie une requête HTTP toutes les 5 minutes à n8n, qui prend la valeur en payload et la stocke dans QuestDB
- Et ça termine dans Grafana ! 🥳
Workflow (trop) complexe
-
On met nos photos et vidéos de concerts, sorties, etc. sur nos NAS respectifs (amis, famille)
-
On a une API qui nous permet de répertorier tous les médias, leur emplacement et leur catégorie (concert, anniversaire, Disney, etc.)
-
On a des accès sur chaque NAS et donc lorsqu'on sait ce qu'on veut, on peut aller le télécharger où il est
-
Ce qu'on veut : demander - avec un message Discord - de faire la recherche et le téléchargement pour nous
Workflow (trop) complexe
Workflow (trop) complexe
-
Nouveaux messages de Discord : titre + catégorie
-
Recherche sur l'API
-
On propose les résultats de 5 en 5 triés par pertinence,
avec les options "next", "download", "details", "giveup"
-
Si on arrive au bout de la liste, on propose de revoir les 5 derniers
-
Si on choisit de télécharger, c'est fait sur notre NAS et on affiche l'espace disque qu'il nous reste
-
On traite les demandes les unes à la suite des autres en identifiant la personne à l'origine de celle-ci
Workflow (trop) complexe
Les boucles 😭😭😭
-
L'API renvoie les résultats de 25 en 25
On a donc une boucle sur la liste, et une fois terminée on doit aller chercher la page suivante.
-
La liste qu'on envoie grâce au nœud `Discord` correspond aux 5 premiers éléments
- soit de notre liste d'origine (`VideosApiOutput`)
- soit de la liste mise à jour (`CodeRemoveFromList`)
Workflow (trop) complexe
-
Variables customs pour savoir si certains nœuds ont été exécuté ou non
-
"Mais pourquoi ne pas utiliser
$("<node-name>").isExecuted Jammy 🤔"
-
"Parce que les boucles Fred ! 🙃"
-
Solution alternative : listener qui déclenche UN workflow lors d'un message
Workflow (trop) complexe
-
Il existe une valeur native aux nœuds pour savoir s'il a déjà été exécuté pendant le workflow, et combien de fois
-
Avec des choix qui font revenir en arrière, une boucle sur les items de 5 en 5 -> impossible de se baser sur le nombre d'exécutions
-
Solution : simuler le reset du workflow = variables customs réinitialisées lorsqu'on passe à la requête suivante
Usages futurs
- On a encore tout plein d'idées pour n8n en 2026 !
- Utiliser les webhooks et des tags NFC pour historiser certaines actions (litières, poubelles, etc)
- Ajouter de la télémétrie sur Trainberry (non, ce projet n'est pas mort, il dort juste !)
- Regarder l'agenda de notre nouveau Head of AI pour trouver le moment optimum pour poser une réunion
- ... Et bien d'autres 😁
Conclusion
-
Dès qu'un workflow est complexe :
-
C'est compliqué à débugger
-
Ça peut vite devenir illisible
-
Un workflow = une action
-
C'est pas toujours intuitif :
-
Doc peu aidante quand on ne sait pas ce qu'on cherche
-
Forum n8n est pas mal mais parfois lourd à lire
-
Pour tester on peut exécuter nœud par nœud mais ne fonctionne pas toujours comme attendu
Conclusion
-
C'est simple
-
Ça permet d'éviter plein de petits bouts de codes par-ci par-là
-
Automatiser c'est vraiment cool et n8n fait gagner pas mal de temps une fois les bases maîtrisées