capistrano2系で使っていた-s/-Sオプションが使えなくなっていた。
検索すればいくらでも見つかる話ではあるが気にせずメモ。
タスクにパラメータを渡す方法として、実行時に環境変数で渡す方法と、実行中に対話的に渡す方法があるみたい。
環境変数でパラメータを渡す
そのままずばり、ENV['NAME']で取ってくる
deploy.rbや deploy/[env].rbに以下のように書く
config/deploy/staging.rb
set :branch, ENV['BRANCH'] || "master"
実行方法は例えばこんな感じ
$ BRANCH=develop cap staging deploy
対話的にパラメータを渡す
2系ではCapistrano::CLI.ui.ask
で対話的にパラメータを入力できた
3系ではCapistrano::CLI
クラスが無くなっているが、askメソッドは使える
askメソッドは第二引数がデフォルト値になる
config/deploy/staging.rb
ask(:branch, 'develop')
テストタスクを書いて挙動を確認してみる
config/deploy.rb
namespace :mytask do
task :test do
puts fetch(:branch)
end
end
実行結果
$ cap staging mytask:test
Please enter branch (develop):
develop
$ cap staging mytask:test
Please enter branch (develop): hoge
hoge
ちなみに、askは最初に変数をfetchしたタイミングで呼ばれる
以下のようなタスクを書いたとして
config/deploy.rb
namespace :mytask do
task :test1 do
puts '1st fetch'
puts fetch(:branch)
puts '2nd fetch'
puts fetch(:branch)
end
task :test2 do
puts 'not fetch'
end
end
実行してみると、test1では最初に1回askされ、test2ではaskされない
$ cap staging mytask:test1
1st fetch
Please enter branch (develop): hoge
hoge
2nd fetch
hoge
$ cap staging mytask:test2
not fetch