6

I have simple Envoy setup. A server:

@servers(['ws' => 'ws.sk'])

... And simple "ping" task:

@task('ping-ws', ['on' => 'ws'])
    echo "Hello world from WS server!"
    echo $(pwd)
    pwd
    var_1="Hello"
    echo "${var_1}"
@endtask

Where I would like to assign some values to variables and access them later. Although the result is quite unexpected:

envoy run ping-ws
Hello world from WS server!
/Users/davidlukac/dev/drupal/_devdesktop/davidlukac
/home
  1. The $(pwd) command is evaluated locally.

  2. Variable var_1 is either not assigned, or out of scope on the next line.

Is this expected behaviour? Is there a workaround for it?

4

2 回答 2

2

查看代码,我们可以看到用于传递命令的方法。首先构建命令:

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 是否会尝试自己进行第一次转义。

于 2016-03-16T19:10:12.793 回答
1

如果需要,您可以使用命令行将选项值传递给 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 文档,欢迎大家多多了解

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

envoy run deploy --var1=var1Value --var2=var2Value
于 2019-02-21T11:41:25.317 回答