質問

複数の役割を持つ複数のサーバーを備えたシステムを運用しています。運用中のすべてのサーバーに再展開することなく、その特定のサーバーに展開することにより、新しいアプリサーバーをテストしたいと思います。 Capistranoに特定のサーバーへの展開を依頼する方法はありますか?理想的には、次のようなものを実行できるようにしたいです

cap SERVER=app2.example.com ROLE=app production deploy

app2.example.comにデプロイしたい場合

ありがとう!

[更新] wulongが提案するソリューションを実行してみました:

cap HOSTS=app2.server.hostname ROLE=app qa deploy 

しかし、capistranoは、アプリのタスクに加えて、そのサーバー上の他のロールのタスクを実行しようとしているようです。キャップのバージョンを更新する必要があるかもしれません(v2.2.0を実行しています)

役に立ちましたか?

解決

Capistranoユーザーリストに質問を投稿しましたこちら 、およびJamisから次の応答を受け取りました(わかりやすくするために、ここで少し編集しました):


HOSTS環境変数を試してください:

cap HOSTS=app2.example.com production deploy

これを行うと、app2がすべての役割にあるものとして扱われるだけでなく、 どちらのロールでも、たまたま宣言されています。

通常のデプロイを行いたいが、app2のみを実行する場合 app2がレシピファイルで宣言されている場合のみ、HOSTFILTERを使用できます 代わりに変数:

cap HOSTFILTER=app2.example.com production deploy 

[...]

この具体例を検討してください。あなたの スクリプトは、A、B、Cの3つのサーバーを定義します。そして、タスク「foo」を定義します。 (デフォルトで)AとBで実行したいが、Cでは実行したくない。このように:

role :app, "A", "B"
role :web, "C"

task :foo, :roles => :app do
  run "echo hello"
end

今、 cap foo を実行すると、AとBの両方でechoコマンドが実行されます。

cap HOSTS = C foo を実行すると、Cでechoコマンドが実行され、 タスクの:rolesパラメーターに関係なく。

cap HOSTFILTER = C foo を実行すると、次の場所でechoコマンドが実行されません。 これは、(A B)と(C)の交差が空のセットだからです。 (そこ Cに一致するfooのホストリストにホストがありません。)

cap HOSTFILTER = A foo を実行すると、echoコマンドが実行されるのは A(A)と交差する(A B)は(A)であるため。

最後に、 cap HOSTFILTER = A、B、C foo を実行すると、エコーが実行されます (A B)が(A B C)と交差しているため、AおよびB(ただしCではない)のコマンド は(A B)です。

要約すると、HOSTSはホストまたはロールの宣言を完全にオーバーライドします 指定されたホストに対してすべてを強制的に実行します。 一方、HOSTFILTERは、既存のホストを単純にフィルタリングします 指定されたリストに対して、すでに存在するサーバーのみを選択する タスクサーバーリスト。

他のヒント

次の設定はそのままで使用できます:

cap HOSTS=app2.example.com ROLE=app deploy

同じロールを持つ> 1サーバーにデプロイする場合:

cap HOSTS=app2.example.com,app3.example.com,app4.example.com ROLE=app deploy

同様の問題があり、次のことを試しました。動作します:

cap production ROLES=web HOSTS=machine1 stats

deploy.rbで次のようなことができるはずです:

task :production do
  if ENV['SERVER'] && ENV['ROLE']
    role ENV['ROLE'], ENV['SERVER']
  else
    # your full config
  end
end

この方法でタスクレベルのホストパラメータを指定することもできます:

task :ship_artifacts, :hosts => ENV['DEST_HOST']  do

end 
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top