Introducción
Laravel Envoy es una herramienta para ejecutar tareas habituales en servidores remotos. Con la misma sintaxis de Blade puedes definir fácilmente tareas como despliegues o la ejecución de comandos Artisan.Envoy solo soporta actualmente macOS y Linux. Para usarlo en Windows necesitas hacerlo a través de WSL2.
Instalación
Instala Envoy en el proyecto con el gestor de paquetes Composer.vendor/bin.
Creación de tareas
Definir una tarea
Las tareas son la unidad básica de Envoy. Una tarea define los comandos de shell que deben ejecutarse en el servidor remoto al lanzarla. Por ejemplo, puedes definir una tarea que ejecutephp artisan queue:restart en todos los servidores de workers de cola.
Todas las tareas de Envoy se definen en el archivo Envoy.blade.php que está en la raíz de la aplicación.
@servers y en la opción on de cada declaración de tarea haces referencia a esos servidores. La declaración @servers debe escribirse siempre en una sola línea. Dentro de la declaración @task describes los comandos de shell que se ejecutarán en el servidor al lanzar la tarea.
Tareas locales
Si indicas127.0.0.1 como IP del servidor, forzarás la ejecución del script en tu equipo local.
Importar tareas de Envoy
Con la directiva@import puedes importar otros archivos de Envoy y añadir sus stories y tareas a tu propio archivo. Tras la importación, puedes ejecutar las tareas igual que si las hubieras definido en tu archivo Envoy.
Múltiples servidores
Con Envoy puedes ejecutar fácilmente una misma tarea en varios servidores. Primero añade servidores adicionales a la declaración@servers asignándoles un nombre único. Una vez añadidos, enuméralos en el array on de la tarea.
Ejecución en paralelo
Por defecto, las tareas se ejecutan de forma serial en cada servidor. Es decir, cuando una tarea finaliza en el primer servidor, pasa al segundo. Para ejecutar la tarea en paralelo en varios servidores, añade la opciónparallel a la declaración.
Setup
Si necesitas ejecutar código PHP arbitrario antes de que se lancen las tareas de Envoy, usa la directiva@setup.
@include al principio del archivo Envoy.blade.php.
Variables
Al invocar una tarea de Envoy, puedes pasar argumentos desde la línea de comandos.if y bucles de Blade. Por ejemplo, para comprobar si existe la variable $branch antes de ejecutar git pull:
Stories
Una story agrupa un conjunto de tareas bajo un nombre cómodo. Por ejemplo, una storydeploy puede ejecutar juntas las tareas update-code e install-dependencies.
Hooks de finalización
Al ejecutar tareas o stories se ejecutan varios hooks. Los tipos que soporta Envoy son@before, @after, @error, @success y @finished. Todo el código dentro de estos hooks se interpreta como PHP y se ejecuta en local, no en los servidores remotos sobre los que opera la tarea.
Puedes definir tantos hooks como quieras, y se ejecutarán en el orden en que aparezcan en el script de Envoy.
@finished recibe el código de estado de la ejecución de las tareas. Es null o un entero mayor o igual que 0.
Ejecutar tareas
Para ejecutar una tarea o story definida en el archivoEnvoy.blade.php de la aplicación, ejecuta el comando run de Envoy y pásale el nombre de la tarea o story. Envoy ejecutará la tarea y mostrará la salida del servidor remoto durante la ejecución.
Confirmar la ejecución de la tarea
Si quieres solicitar confirmación antes de ejecutar una tarea concreta en el servidor, añade la directivaconfirm a la declaración de la tarea. Es especialmente útil para operaciones destructivas.
Notificaciones
Slack
Envoy puede enviar notificaciones a Slack tras la ejecución de cada tarea. La directiva@slack recibe la URL del webhook de Slack y el nombre del canal (o del usuario). La URL del webhook se obtiene creando una integración «Incoming WebHooks» en el panel de control de Slack.
En el primer argumento de @slack pasa la URL completa del webhook. En el segundo indica el nombre del canal (#channel) o del usuario (@user).
@slack.
Discord
Envoy también permite enviar notificaciones a Discord tras cada ejecución. La directiva@discord recibe la URL del webhook de Discord y un mensaje. La URL se obtiene creando un «Webhook» en la configuración del servidor y seleccionando el canal de destino.
Telegram
Envoy también admite enviar notificaciones a Telegram tras cada ejecución. La directiva@telegram recibe el ID del bot de Telegram y el Chat ID. El ID del bot se obtiene creando un nuevo bot en BotFather. El Chat ID puede obtenerse con @username_to_id_bot.
Microsoft Teams
Envoy también admite enviar notificaciones a Microsoft Teams tras cada ejecución. La directiva@teams recibe el webhook de Teams (obligatorio), el mensaje, un color de tema (success, info, warning, error) y, opcionalmente, un array de configuración. El webhook de Teams se obtiene creando un Incoming Webhook. La API de Teams tiene muchos más ajustes que te permiten crear tus propias tarjetas de mensaje. Para más detalles consulta la documentación de Microsoft Teams.