web-dev-qa-db-ja.com

プロンプトなしで、または事前定義された応答を使用してDrush rsyncをトリガーするgit post-receiveフック

ステージングサーバーにポスト受信フックを設定したので、開発サーバーからマスターブランチをプッシュするたびに、ステージングWebルートが更新され、drush rsyncがトリガーされてライブサイトが更新されます。

#!/bin/bash

    while read oldrev newrev ref
    do
      branch=`echo $ref | cut -d/ -f3`

      if [ "master" == "$branch" ]; then
    git --work-tree=/var/www/drupal/ checkout -f $branch
    drush rsync --delete --exclude='.htaccess' --exclude='io' --log-file=rsynclog.txt --exclude-files @stage @live 

        echo 'Changes pushed live.'
      fi

      if [ "dev" == "$branch" ]; then
        git --work-tree=/var/www/drupal/ checkout -f $branch
        echo 'Changes pushed to staging.'
      fi
    done

または、私はそうしたいと思っていました:)私は所定の場所にsshキーを持っていますが、それは問題ではありません。 git Push Origin from dev machineの後の出力:

オブジェクトのカウント:15、完了。

最大4つのスレッドを使用するデルタ圧縮。オブジェクトの圧縮:100%(8/8)、完了。オブジェクトの書き込み:100%(8/8)、762バイト、完了。合計8(デルタ5)、再利用0(デルタ0)

リモート:すでに「マスター」

リモート:mydomain.com:/var/www/drupal/からのデータを破棄し、/ var/www/drupal //からのデータで置き換えますリモート:本当に続行しますか?(y/n):中止しています。[キャンセル]

リモート:変更はライブでプッシュされます。 root @ dev:/ git/drupal 65abd19..7205946 master-> masterへ

ですから、スクリプトに答えがyであることをなんとかして伝える必要があります。または、その質問をまったく回避する方法が必要です。

また、私はプロbashスクリプトではありません;)、それらのコマンドはphpのようにインラインで実行されているため、他のコマンドが完了する前に実行されませんか? (変更が最初にステージングWebrootで伝達され、次にすべてがライブでrsyncされることを確認するため)。

3
NenadP

Drushコマンドに--yesオプションを追加します。これは確実にwill配置すると機能しますbefore rsyncディレクティブ。

例えば:

drush --yes rsync @dev @live

Drush rsyncは、厳密なオプション処理を使用するという点で、ほとんどのDrushコマンドとは異なります。厳密なオプションで機能するコマンドは、呼び出されるツールのDrushコマンド名の後に表示されるすべての追加フラグを渡します。したがって、_yesはDrushによって無視され、rsyncに渡されるため、drush rsync --yes @dev @liveは失敗します。

詳細については、以下を参照してください。

drushトピックdocs-strict-options

5
greg_1_anderson