ステージングサーバーにポスト受信フックを設定したので、開発サーバーからマスターブランチをプッシュするたびに、ステージング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されることを確認するため)。
Drushコマンドに--yesオプションを追加します。これは確実にwill配置すると機能しますbefore rsyncディレクティブ。
例えば:
drush --yes rsync @dev @live
Drush rsyncは、厳密なオプション処理を使用するという点で、ほとんどのDrushコマンドとは異なります。厳密なオプションで機能するコマンドは、呼び出されるツールのDrushコマンド名の後に表示されるすべての追加フラグを渡します。したがって、_yesはDrushによって無視され、rsyncに渡されるため、drush rsync --yes @dev @live
は失敗します。
詳細については、以下を参照してください。