执行 Laravel Envoy 任务时如何访问 bash 中声明的变量?

How can I access declared variable in bash when executing Laravel Envoy task?

我有简单的 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
  1. $(pwd) 命令在本地求值。

  2. 变量 var_1 未分配,或超出下一行的范围。

这是预期的行为吗?有解决方法吗?

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, that command is sent off to be run by PHP's 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

来自特使官方文档,欢迎大家阅读learn more

如果您想添加多个变量,只需添加您需要的变量即可。

envoy run deploy --var1=var1Value --var2=var2Value