Introduction
Laravel Envoy est un outil qui permet d’exécuter des tâches courantes sur des serveurs distants. Grâce à la même syntaxe que Blade, vous pouvez définir facilement des tâches de déploiement ou d’exécution de commandes Artisan.Envoy ne prend actuellement en charge que macOS et Linux. Sous Windows, vous devrez l’utiliser via WSL2.
Installation
Installez Envoy dans votre projet via le gestionnaire de packages Composer.vendor/bin.
Création de tâches
Définir une tâche
Les tâches sont l’élément de base d’Envoy. Une tâche définit les commandes shell à exécuter sur un serveur distant lorsque la tâche est lancée. Vous pouvez par exemple définir une tâche qui exécutephp artisan queue:restart sur tous les serveurs de workers de queue.
Toutes les tâches Envoy se déclarent dans le fichier Envoy.blade.php à la racine de votre application.
@servers en haut du fichier, puis on référence ces serveurs via l’option on de chaque déclaration de tâche. La déclaration @servers doit tenir sur une seule ligne. À l’intérieur d’un @task, vous décrivez les commandes shell à exécuter sur le serveur lors de l’exécution.
Tâches locales
En précisant l’adresse IP127.0.0.1 du serveur, vous forcez l’exécution du script sur votre machine locale.
Importer un fichier Envoy
La directive@import permet d’importer d’autres fichiers Envoy afin d’ajouter leurs stories et leurs tâches au fichier courant. Une fois importées, vous exécutez ces tâches exactement comme celles définies dans votre propre fichier Envoy.
Plusieurs serveurs
Envoy permet d’exécuter facilement une même tâche sur plusieurs serveurs. Enregistrez d’abord les serveurs supplémentaires dans la déclaration@servers en leur donnant à chacun un nom unique. Ensuite, listez ces serveurs dans le tableau on de la tâche.
Exécution en parallèle
Par défaut, la tâche s’exécute en série sur chaque serveur : l’exécution sur le second serveur ne démarre qu’une fois terminée sur le premier. Pour exécuter la tâche en parallèle, ajoutez l’optionparallel à la déclaration de la tâche.
Setup
Utilisez la directive@setup pour exécuter du code PHP quelconque avant d’exécuter les tâches Envoy.
@include en haut de votre Envoy.blade.php.
Variables
Lors du lancement d’une tâche Envoy, vous pouvez lui passer des arguments depuis la ligne de commande.if et les boucles Blade sont également disponibles. Par exemple, pour vérifier l’existence de la variable $branch avant d’exécuter git pull :
Stories
Une story regroupe plusieurs tâches sous un nom pratique. Par exemple, une storydeploy peut lancer à la suite les tâches update-code et install-dependencies.
Hooks d’exécution
Plusieurs hooks sont déclenchés lors de l’exécution d’une tâche ou d’une story. Envoy prend en charge@before, @after, @error, @success et @finished. Le code de ces hooks est interprété comme du PHP et s’exécute en local, pas sur les serveurs distants ciblés par la tâche.
Vous pouvez définir autant de hooks que vous voulez ; ils s’exécutent dans l’ordre où ils apparaissent dans votre script Envoy.
@finished reçoit le code de sortie de la tâche terminée. Ce code peut être null ou un entier positif ou nul.
Exécuter les tâches
Pour exécuter une tâche ou une story définie dansEnvoy.blade.php, lancez la commande run d’Envoy en lui passant le nom de la tâche ou de la story. Envoy exécute la tâche et affiche en direct la sortie des serveurs distants.
Confirmation avant exécution
Pour demander une confirmation avant d’exécuter une tâche donnée sur les serveurs, ajoutez la directiveconfirm à la déclaration de la tâche. C’est particulièrement utile pour les opérations destructrices.
Notifications
Slack
Envoy peut envoyer une notification vers Slack à la fin de chaque tâche. La directive@slack accepte une URL de webhook Slack ainsi qu’un nom de canal (ou d’utilisateur). L’URL de webhook s’obtient en créant une intégration « Incoming WebHooks » dans le panneau de contrôle Slack.
Passez l’URL complète du webhook comme premier argument de @slack. Le deuxième argument est un nom de canal (#channel) ou d’utilisateur (@user).
@slack.
Discord
Envoy peut également notifier Discord après chaque tâche. La directive@discord accepte l’URL de webhook Discord et un message. L’URL de webhook s’obtient en créant un « Webhook » dans les paramètres du serveur, en choisissant le canal cible.
Telegram
Envoy peut aussi notifier Telegram après chaque tâche. La directive@telegram prend un Bot ID Telegram et un Chat ID. Le Bot ID s’obtient en créant un bot avec BotFather. Pour le Chat ID, vous pouvez utiliser @username_to_id_bot.
Microsoft Teams
Envoy peut également notifier Microsoft Teams après chaque tâche. La directive@teams prend un webhook Teams (obligatoire), un message, une couleur de thème (success, info, warning, error) et, en option, un tableau de configuration. Vous obtenez le webhook Teams en créant un Incoming Webhook. L’API Teams offre de nombreuses options pour composer vos propres cartes de message : consultez la documentation Microsoft Teams pour plus de détails.