Outil de déploiement Envoy
- Mettre à jour Envoy
- Slack
- DiscordTâche d'écriture
- Configuration
- Histoires
Introduction
Laravel Envoy fournit un ensemble de syntaxe concise et légère pour définir les tâches quotidiennes des serveurs distants. La syntaxe de style lame peut être utilisée pour configurer des tâches de déploiement, exécuter des commandes Artisan, etc. Actuellement, Envoy ne prend en charge que les systèmes d'exploitation Mac et Linux. .
Installation
Tout d'abord, exécutez la commande global require
de Composer pour installer Envoy globalement :global require
命令进行全局安装 Envoy:
composer global require laravel/envoy
由于全局 Composer 库有时会导致包版本冲突,因此您可能希望考虑使用 cgr
,它是 composer global require
命令的直接替代品。 cgr
库的安装说明可参阅 found on GitHub.
确保将
〜/ .composer / vendor / bin
目录放在 PATH 中,以便在终端中运行envoy
命令时找到envoy
可执行文件。
更新 Envoy
您也可以使用 Composer 使您的 Envoy 安装保持最新。 使用 composer global update
命令将更新所有全局安装的 Composer 包:
composer global update
编写任务
您的所有 Envoy 任务都应该在项目根目录中的 Envoy.blade.php
文件中定义。 这是一个让你入门的例子:
@servers(['web' => ['user@192.168.1.1']]) @task('foo', ['on' => 'web']) ls -la @endtask
如您所见,在文件顶部定义了一个 @server
数组,允许您在任务声明的 on
选项中引用这些服务器。 在你的 @ task
声明中,你应该放置在任务执行时应该在你的服务器上运行的 Bash 代码。
您可以通过将服务器的 IP 地址指定为 127.0.0.1
来强制脚本在本地运行:
@servers(['localhost' => '127.0.0.1'])
配置
有时,您可能需要在执行 Envoy 任务之前执行一些 PHP 代码。 您可以使用 @ setup
指令声明变量,并在执行任何其他任务之前执行其他常规 PHP 工作:
@setup $now = new DateTime(); $environment = isset($env) ? $env : "testing"; @endsetup
如果在执行任务之前需要其他 PHP 文件,可以在 Envoy.blade.php
文件的顶部使用 @include
指令:
@include('vendor/autoload.php') @task('foo') # ... @endtask
变量
如果需要,您可以使用命令行将选项值传递到 Envoy 任务:
envoy run deploy --branch=master
您可以通过 Blade 的「echo」 语法访问任务中的选项。 您也可以在任务中使用 if
语句和循环。 例如,在执行 git pull
命令之前,让我们验证 $ branch
@servers(['web' => '192.168.1.1']) @task('deploy', ['on' => 'web']) cd site @if ($branch) git pull origin {{ $branch }} @endif php artisan migrate @endtaskÉtant donné que les bibliothèques globales de Composer peuvent parfois provoquer des conflits de version de package, vous souhaiterez peut-être envisager en utilisant
cgr
, qui remplace directement la commande composer global require
. Les instructions d'installation de la bibliothèque cgr
peuvent être trouvées sur GitHub.Assurez-vous d'ajouter ~ Le répertoire / .composer / seller / bin
est placé dans le PATH afin que l'exécutable envoy
soit trouvé lors de l'exécution de la commande envoy
dans le Terminal.
Mise à jour d'Envoy
composer global update
mettra à jour tous les packages Composer installés globalement : 🎜@servers(['web' => '192.168.1.1']) @story('deploy') git composer @endstory @task('git') git pull origin master @endtask @task('composer') composer install @endtask🎜🎜🎜
Envoy.blade.php
dans le répertoire racine de votre projet. Voici un exemple pour commencer : 🎜envoy run deploy🎜Comme vous pouvez le constater, il y a un tableau
@server
défini en haut du fichier, vous permettant de spécifier le on
option dans la déclaration de tâche Référencez ces serveurs. Dans votre déclaration @task
, vous devez placer le code Bash qui doit être exécuté sur votre serveur lors de l'exécution de la tâche. 🎜🎜Vous pouvez forcer l'exécution du script localement en spécifiant l'adresse IP du serveur comme 127.0.0.1
: 🎜@servers(['web-1' => '192.168.1.1', 'web-2' => '192.168.1.2']) @task('deploy', ['on' => ['web-1', 'web-2']]) cd site git pull origin {{ $branch }} php artisan migrate @endtask🎜🎜🎜
@setup
pour déclarer des variables et effectuer d'autres travaux PHP généraux avant d'effectuer toute autre tâche : 🎜@servers(['web-1' => '192.168.1.1', 'web-2' => '192.168.1.2']) @task('deploy', ['on' => ['web-1', 'web-2'], 'parallel' => true]) cd site git pull origin {{ $branch }} php artisan migrate @endtask🎜 Si vous avez besoin d'autres fichiers PHP avant d'effectuer des tâches, ils peuvent être trouvés dans
Envoy.blade Utilisez la directive @include
en haut du fichier .php
: 🎜envoy run task🎜🎜🎜
@task('deploy', ['on' => 'web', 'confirm' => true]) cd site git pull origin {{ $branch }} php artisan migrate @endtask🎜Vous pouvez accéder aux options de la tâche via la syntaxe "écho" de Blade. Vous pouvez également utiliser des instructions et des boucles
if
dans les tâches. Par exemple, avant d'exécuter la commande git pull
, vérifions l'existence de la variable $ branch
: 🎜@finished @slack('webhook-url', '#bots') @endfinished🎜🎜🎜🎜🎜🎜
Stories
Stories regroupe un ensemble de tâches sous un nom pratique, vous permettant de regrouper de petites tâches ciblées en tâches plus grandes. Par exemple, la story deploy
peut exécuter les tâches git
et composer
en listant le nom de la tâche dans sa définition : deploy
故事可以通过在其定义中列出任务名称来运行 git
和 composer
任务:
@finished @discord('discord-webhook-url') @endfinished
一旦编写了 story ,你可以像一个典型的任务一样运行它:
rrreee多服务器
Envoy 允许您轻松跨多个服务器运行任务。 首先,在 @server
声明中添加其他服务器。 应为每个服务器分配一个唯一的名称。 定义了其他服务器后,列出任务的「on」数组中的每个服务器:
并行运行
默认情况下,将在每个服务器上串行执行任务。 换句话说,任务将在继续在第二台服务器上执行之前在第一台服务器上完成运行。 如果您想并行运行多个服务器上的任务,请在任务声明中添加 parallel
选项:
运行任务
要运行在 Envoy.blade.php
文件中定义的任务或故事,请执行 Envoy 的 run
命令,传递您要执行的任务或故事的名称。 当任务运行时, Envoy 将运行任务并显示服务器的输出:
任务确认
如果您希望在服务器上运行给定任务之前提示您进行确认,则应将 confirm
指令添加到任务声明中。 此选项对于破坏性操作特别有用:
消息通知
Slack
Envoy 还支持在执行每个任务后向 Slack 发送通知。 @slack
指令接受 Slack 钩子 URL 和通道名称。 您可以通过在 Slack 控制面板中创建 Incoming WebHooks
集成来检索您的 webhook URL 。 您应该将整个 webhook URL 传递给 @slack
指令:
您可以提供以下其中一项作为频道参数:
- 给频道发送通知:
#channel
- 给用户发送通知:
@user
rrreee Une fois la story terminée écrit, vous pouvez l'exécuter comme une tâche typique :
Envoy prend également en charge l'envoi de notifications à Discord après l'exécution de chaque tâche. @server
. Chaque serveur doit se voir attribuer un nom unique. Après avoir défini les autres serveurs, listez chaque serveur dans le tableau "on" de la tâche : 🎜rrreeeExécuter en parallèle
🎜Tâches par défaut sera exécuté en série sur chaque serveur. En d’autres termes, la tâche terminera son exécution sur le premier serveur avant de continuer sur le deuxième serveur. Si vous souhaitez exécuter des tâches sur plusieurs serveurs en parallèle, ajoutez l'option parallel
à la déclaration de la tâche : 🎜rrreee🎜🎜🎜Exécuter la tâche
🎜Pour exécuter une tâche ou une histoire définie dans le fichier Envoy.blade.php
, exécutez le run d'Envoy code> commande, en passant le nom de la tâche ou de l’histoire que vous souhaitez effectuer. Lorsque la tâche s'exécute, Envoy exécutera la tâche et affichera la sortie du serveur : 🎜rrreee🎜🎜🎜
confirm
à la déclaration de la tâche. Cette option est particulièrement utile pour les opérations destructrices : 🎜rrreee🎜🎜🎜Notifications de messages
🎜🎜🎜@slack
accepte une URL de hook Slack et un nom de canal. Vous pouvez récupérer l’URL de votre webhook en créant une intégration de WebHooks entrants
dans votre tableau de bord Slack. Vous devez transmettre l'intégralité de l'URL du webhook à la directive @slack
: 🎜rrreee🎜Vous pouvez fournir l'un des éléments suivants comme paramètre de canal : 🎜< li> Envoyer une notification à la chaîne :
#channel
🎜@user
🎜🎜🎜🎜🎜🎜🎜🎜🎜Discord
@ discord
指令接受 Discord 钩子 URL 和消息。 您可以通过在 Webhook
中创建 Webhook 并选择 webhook 应发布到哪个频道来检索您的 webhook URL。 您应该将整个 Webhook URL 传递到 @ discord
Commande :