我有简单的Envoy设置。服务器:
@servers(['ws' => 'ws.sk'])
。和简单的"ping"任务:
@task('ping-ws', ['on' => 'ws'])
echo "Hello world from WS server!"
echo $(pwd)
pwd
var_1="Hello"
echo "${var_1}"
@endtask
我想为变量分配一些值并稍后访问它们。虽然结果很出乎意料:
envoy run ping-ws
Hello world from WS server!
/Users/davidlukac/dev/drupal/_devdesktop/davidlukac
/home
$(pwd)
命令在本地进行评估。变量
var_1
未分配,或者超出下一行的范围。
这是预期行为吗?有解决方法吗?
查看代码,我们可以看到用于传递命令的方法。首先构建命令:
ssh ws.sk 'bash -se' << EOF-LARAVEL-ENVOY
echo "Hello world from WS server!"
echo $(pwd)
pwd
var_1="Hello"
echo "${var_1}"
EOF-LARAVEL-ENVOY
然后,该命令被发送到PHP的proc_open
命令运行。
由于输入是通过 STDIN 传递的,因此在发送之前,它会被本地环境解释。您可以将上述内容复制并粘贴到终端中以查看相同的内容。
所需要的只是转义任何可能被本地环境解释的字符;在本例中,$
字符。
@task('ping-ws', ['on' => 'ws'])
echo "Hello world from WS server!"
echo '$(pwd)
pwd
var_1="Hello"
echo "'${var_1}"
@endtask
请注意,您可能需要双重逃生,不确定 Envoy 是否会尝试将第一次逃生占为己有。
如果需要,您可以使用命令行将选项值传递到 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
它来自官方特使文档,因此欢迎您了解更多信息
如果要添加多个变量,只需根据需要附加尽可能多的变量即可。
envoy run deploy --var1=var1Value --var2=var2Value