Introduzione
Laravel Envoy è uno strumento per eseguire task comuni su server remoti. Con la stessa sintassi di Blade, definisci facilmente task come deploy o esecuzione di comandi Artisan.Al momento Envoy supporta solo macOS e Linux. Su Windows va usato tramite WSL2.
Installazione
Installa Envoy nel progetto tramite Composer.vendor/bin.
Creare task
Definire un task
I task sono il mattone di base di Envoy. Un task definisce i comandi shell da eseguire sul server remoto quando lo si esegue. Ad esempio puoi definire un task che eseguephp artisan queue:restart su tutti i server dei worker della coda.
Tutti i task di Envoy si definiscono nel file Envoy.blade.php nella root dell’applicazione.
@servers all’inizio del file e nei task fai riferimento a questi server tramite l’opzione on. La dichiarazione @servers va scritta obbligatoriamente su una sola riga. Dentro @task scrivi i comandi shell da eseguire sul server quando il task viene lanciato.
Task locali
Specificando come indirizzo IP127.0.0.1 puoi forzare l’esecuzione dello script sul computer locale.
Importare task Envoy
Con la direttiva@import puoi importare altri file Envoy e aggiungere le loro story e i loro task al tuo file. Dopo l’import puoi eseguire i task come se fossero definiti nel tuo Envoy file.
Più server
Con Envoy puoi eseguire facilmente un task su più server. Aggiungi i server nella dichiarazione@servers assegnando un nome univoco a ciascuno, poi elencali nell’array on del task.
Esecuzione in parallelo
Per default il task viene eseguito in serie: dopo che è terminato sul primo server passa al secondo. Per eseguire il task in parallelo su più server, aggiungi l’opzioneparallel alla dichiarazione del task.
Setup
Se devi eseguire del codice PHP prima di lanciare i task Envoy, usa la direttiva@setup.
@include all’inizio di Envoy.blade.php.
Variabili
Quando esegui un task Envoy puoi passare argomenti da riga di comando.if e cicli di Blade. Ad esempio, per verificare che la variabile $branch esista prima di eseguire git pull:
Story
Una story raggruppa una sequenza di task sotto un unico nome comodo. Ad esempio la storydeploy esegue insieme i task update-code e install-dependencies.
Hook di completamento
Durante l’esecuzione di task e story vengono lanciati diversi hook. Envoy supporta@before, @after, @error, @success e @finished. Il codice dentro questi hook è interpretato come PHP e viene eseguito in locale, non sui server remoti su cui opera il task.
Puoi definire tutti gli hook che vuoi; vengono eseguiti nell’ordine in cui compaiono nello script Envoy.
@finished riceve lo status code del task completato. Lo status code è null oppure un intero >= 0.
Eseguire i task
Per eseguire un task o una story definiti inEnvoy.blade.php, esegui il comando run di Envoy passandone il nome. Envoy esegue il task e mostra in tempo reale l’output dai server remoti.
Conferma dell’esecuzione
Se vuoi chiedere conferma prima di eseguire un task, aggiungi la direttivaconfirm alla dichiarazione. È utile soprattutto per operazioni distruttive.
Notifiche
Slack
Envoy può inviare una notifica a Slack dopo ogni esecuzione. La direttiva@slack accetta l’URL del webhook Slack e il nome del canale (o utente). L’URL del webhook si ottiene creando un’integrazione “Incoming WebHooks” dal pannello di Slack.
Come primo argomento passi l’intero URL del webhook; come secondo, un canale (#channel) o un utente (@user).
@slack puoi sovrascriverlo con un messaggio personalizzato.
Discord
Envoy supporta anche l’invio di notifiche a Discord dopo ogni esecuzione. La direttiva@discord accetta URL del webhook Discord e messaggio. Il webhook si crea nelle impostazioni del server scegliendo “Webhook” e il canale di destinazione.
Telegram
Envoy supporta anche notifiche a Telegram dopo ogni esecuzione. La direttiva@telegram accetta Bot ID e Chat ID Telegram. Il Bot ID si ottiene creando un nuovo bot con BotFather; il Chat ID si ricava con @username_to_id_bot.
Microsoft Teams
Envoy supporta anche notifiche a Microsoft Teams dopo ogni esecuzione. La direttiva@teams accetta il webhook Teams (obbligatorio), un messaggio, il colore del tema (success, info, warning, error) e un array di configurazione opzionale. Il webhook Teams si ottiene creando un Incoming Webhook. L’API Teams ha molte altre opzioni con cui puoi comporre le tue message card. Per i dettagli consulta la documentazione di Microsoft Teams.