LoginSignup
71
69

More than 5 years have passed since last update.

capistrano3 タスクにパラメータを渡す方法

Last updated at Posted at 2014-06-10

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
71
69
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
71
69