6

私は簡単な 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が割り当てられていないか、次の行の範囲外です。

これは予想される動作ですか?回避策はありますか?

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 に答える