2011-07-20 7 views
4

私たちは複数のクライアントに販売するコードベースを用意しています。自動化されたデプロイメントのために、バージョン管理用のgitとCapistranoを使用します。capistranoとgitを使用して、同じコードベースを複数のサーバに配備する

デザインレイアウト、CSSファイル、ロゴ、アプリケーションへのパスとcakephpディレクトリがあるCAKEPHPのフロントコントローラのような設定ファイルの間には多少の違いがあります。

現在、プロジェクトの主なマスター/ステージングブランチがあります。トピックブランチで開発します。トピックブランチをコードベースにマージする準備ができたら、トピックブランチをステージングしてメインステージングサーバーに展開します。

コードがステージングでテストされ、リリース準備が整ったらステージングをマスターにマージします。次に、さまざまなクライアントサーバーに展開する必要があります。私たちには、各クライアント用のステージングサーバーとプロダクションサーバーがあります。

現在、各クライアントのステージングおよびプロダクションブランチがあり、各別のブランチから各サーバーに展開しています。これは、主なプロジェクトブランチを各クライアントのステージング/プロダクションブランチにマージし、各サーバーのランcap deployをマージする必要があるため、苦しい状況にあります。

1つのブランチからクライアントサーバーにデプロイするだけで、各クライアントサーバーが動作して正しく見えるようにするために必要なさまざまなファイルを含めるにはどうすればよいですか。

答えて

1

私はカピストラーノ/エクストラ/多段階を使って同様のことをしました。

生産に引き渡すときはcap prod deployを使用できますが、テストするときはcap test deployを使用できます。

マイCapfileが設定/ deploy.rbで

require 'rubygems' 
require 'railsless-deploy' 
require 'capistrano/ext/multistage' 

set :stages, %w(staging) 

load 'config/deploy' 

のように見えますが、私のメインのデプロイスクリプトです。

config/deployでは、私は各環境ごとにスクリプトを用意しています。すなわちprod.rbおよびtest.rb。

これらの環境固有のスクリプトには、これらの環境に固有の変数が含まれています。通常は、branch、user、app、deploy_to、copy_remote_dir、copy_excludeなど、環境によって異なるかもしれないメインconfig/deploy.rbで使用する必要がある変数を指定します。

一部の変数は、環境に固有のすべてのスクリプトには表示されない場合があります。そのため、deploy.rbは使用前に存在の有無を確認します。すなわち

# Link upload area 
if exists?(:uploads) 
    run "rm -rf #{current_release}#{uploads}" 
    run "ln -s #{shared_path}#{uploads} #{current_release}#{uploads}" 
end 

時々、私は

# Copy config 
run "cp #{current_release}/config/#{stage}/app/config.php #{current_release}/src/app" 

ステージング名を使用して、環境固有の設定をコピーします私はgitのと私のdeploy_viaのコピー戦略を使用して言及する必要があります。その結果、すべてのコンフィグは、途中のディレクトリにあるサーバにアップロードされ、そこにコピーされます。あなたのマイレージは異なる場合があります。

ここでは、capstranoの多段延長について詳しく説明します:http://weblog.jamisbuck.org/2007/7/23/capistrano-multistage

関連する問題