我有简单的特使设置。服务器:
@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
未分配,或未在下一行的范围之外。
这是预期的行为吗?它有解决方法吗?
答案 0 :(得分:2)
Looking at the code,我们可以看到用于传递命令的方法。首先构建命令:
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
并且then,该命令被发送出来由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是否会尝试为自己进行第一次逃脱。
答案 1 :(得分:0)
如果需要,您可以使用命令行将选项值传递给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
它来自官方特使文档,因此欢迎您使用learn more
如果要添加多个变量,只需添加所需数量即可。
envoy run deploy --var1=var1Value --var2=var2Value