私は Capistrano を使用して RoR アプリケーションをデプロイしています。コードベースは Git リポジトリにあり、開発ではブランチが広く使用されています。Capistrano はdeploy.rb
設定にファイルを使用します。その 1 つがデプロイ元のブランチです。
私の問題はこれです:新しいブランチを作成するとしますあからマスターデプロイファイルはマスターブランチを編集します。あテスト環境にデプロイできます。機能の作業を終えてブランチをマージしますあの中へマスター.deploy.rb
ファイルはあより新鮮なので、統合され、今でdeploy.rb
はマスターブランチ参照あ再び編集する時間です。
これは一見不必要な手動編集の多くです。パラメータは常に現在のブランチ名と一致する必要があります。その上、毎回設定を編集するのを忘れがちです。
このプロセスを自動化する最善の方法は何でしょうか?
編集:結局誰かがすでに私が必要としていたことをやってくれていた:
今朝、git リポジトリのブランチをステージング サーバーにデプロイする機会がありましたが、その方法がまったくわかりませんでした。capistrano のソース コードをざっと検索したところ、
:branch "branch_name"
デプロイ スクリプトで set を使用できることがわかりました。試してみたところ、うまくいきました。次に、すべてのブランチで同様の変更を行う必要があると考えました。もちろん、私は怠け者なので、もっと良い方法はないだろうかと考えました。Git に慣れていない場合、git branch コマンドの出力は、ローカル マシンで現在チェックアウトされているブランチにアスタリスクが付いたブランチのリストになります。例:
> git branch * drupal_authentication fragment_caching master
そこで、出力を解析して、現在としてマークされているブランチを検索したらどうなるかと考えました。
set :branch, $1 if `git branch` =~ /\* (\S+)\s/m
これで、単一の共有デプロイ スクリプトから、ローカル マシン上の現在のブランチをデプロイできるようになりました。
ベストアンサー1
これは Capistrano >= 3.1 で動作します:
次の行を追加しますconfig/deploy.rb
:
set :branch, ENV['BRANCH'] if ENV['BRANCH']
そして、次のように capistrano を呼び出します。
cap production deploy BRANCH=master
このソリューションは Capistrano < 3.1 で動作します:
# call with cap -s env="<env>" branch="<branchname>" deploy
set :branch, fetch(:branch, "master")
set :env, fetch(:env, "production")