2011-06-29 12 views
8

私のプロジェクトには、クロール、NLPなどのいくつかのステップが含まれているマルチステップパイプラインがありますが、私はそれらをStep1、Step2などと呼んでいます。さまざまな環境(dev、prodなど)に展開することができます。特定のロールのみのCapistranoタスクを実行しています

私はさまざまな環境に展開するために、Capistrano用に多段階コンポーネントを使用します(例:cap dev deploy vs cap prod deploy)。

また、パイプラインステップごとに役割を使用することは直感的に理解できるようです。ただし、各ステップはパイプラインの残りの部分とは独立して実行されるため、各ステップは他のステップとは独立して再始動/デプロイできます。 Capistranoが特定の役割のためだけに実行中のタスクを明示的にサポートしているようには思われません。これを行うには良い方法は何ですか?

これは、役割ごとに具体的に定義されたタスクを実行する最善の方法ですか?ロール間で共通のタスクがある場合はどうなりますか?たぶんヘルパーメソッドは答えですか?

答えて

1

チェックこの議論をCreating a Capistrano task that performs different tasks based on role

task :stop_memcached, :roles => :memcache do 
... 
end 
+0

私が探しているものではありません。例えば、私は仕事を持っていた場合のように: ' タスク:clear_logsは 実行「のrm -f /tmp/blah.log」 展開の一環として、 ' を終了する操作を行い、私はすべての私の上でそれを実行したいと思います私のパイプラインにすべてのステップを導入していたのですか?しかし、私がパイプラインのステップ2だけを展開しているのであれば、ステップ2の役割を持つすべてのマシンのログをクリアしたいだけです。 私が直面している役割の問題は、タスクを実行するマシンを指定することに優れていることですが、特定の配置に対して実際に実行するかどうかを指定できないようです。 – JZC

3

ない、これはあなたが探している正確に何ですが、私は特定の役割に何かをしたいとき、私はカピストラーノシェルを使用してください。たとえば、アプリケーションサーバーだけにデプロイしたいとします。

cap production shell 
cap>with app 
cap>!deploy #or any other cap task you have 

また、必要に応じてマシンでスコープを設定することもできます。再び:

cap production shell 
cap>on <machine name or ip> 
cap>!deploy #or any other cap task you have 

はそれが役に立てば幸い

スコット

機能が追加されましたどのバージョンで
1

わからないが、キャップは、実行する役割を決定するためのロールで環境変数を見ていきますので

$ ROLES=db cap deploy 
2

capistranoタスクをコマンドラインから実行する場合は、定義されたロールのサブセットに対してのみ、ROLESパラメータを使用できます。

以下のコマンドは唯一の役割wasのためのタスクcategory:taskを実行します。

cap ROLES=was category:task 

ROLESパラメータが多値ているので、あなたは、カンマで区切って複数の役割を追加することができます。詳細については

cap ROLES=was,db category:task 

invokeのマニュアルを参照することができます