Capistranoでwebサーバごとに実行するコマンドを変える。
需要は有りそうだが情報が少ないので簡単にまとめておく。
方針
- サーバごとに独立ロールを設定
- ロールごとのタスクを追加
- afterタスク等を使用して、複数のタスクを追随起動させる。
サンプル (deploy.rb ※抜粋)
role :web, "localhost", "192.168.2.20" ... # 独立したロールを設定 role :web1, "localhost" role :web2, "192.168.2.20" # afterで「aa:echo」タスクの後に実行したいタスクを記述(複数記述可能) after "aa:echo", "aa:echo1", "aa:echo2" # ロールごとのタスクを記述 namespace :aa do task :echo, :roles => :web do run "echo ECHO" end task :echo1, :roles => :web1 do run "echo ECHO1" end task :echo2, :roles => :web2 do run "echo ECHO2" end end
サンプル実行結果
hoge@fuga:~/development/captest$ cap aa:echo * executing `aa:echo' * executing "echo ECHO" servers: ["localhost", "192.168.2.20"] # echoコマンドはwebロールで実行 [192.168.2.20] executing command ** [out :: 192.168.2.20] ECHO [localhost] executing command ** [out :: localhost] ECHO command finished triggering after callbacks for `aa:echo' * executing `aa:echo1' * executing "echo ECHO1" servers: ["localhost"] # echo1コマンドはweb1ロールのみで実行 [localhost] executing command ** [out :: localhost] ECHO1 command finished * executing `aa:echo2' * executing "echo ECHO2" servers: ["192.168.2.20"] # echo2コマンドはweb2ロールのみで実行 [192.168.2.20] executing command ** [out :: 192.168.2.20] ECHO2 command finished