【Rails】capistrano でのデプロイを idobata に通知する
結構サックリいけるかなと思ったら、なぜかハマったのでメモがてら...
capstrano 3 だけど、
IdobataにCapistrano(2系)のdeploy通知を投げる - Qiita この辺を参考にしつつ、とりあえずそのままベタ書きして実行してみたら怒られた。
config/deploy.rb
after 'deploy:restart', 'deploy:notify_revision'
# user_name, user_repository, idobata_hook_url は自分のものに修正
namespace :deploy do
# idobata 通知
task :notify_revision do
user_name = `git config --global user.name`.gsub("
", '')
github_path = "https://github.com/user_name/user_repository/tree/#{current_revision}"
source = "App was deployed by #{user_name} #{stage}deployed source tree: #{current_revision[0, 7]}"
idobata_hook_url = "https://idobata.io/hook/custom/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
run "curl --data-urlencode 'source=#{source}' -d format=html #{idobata_hook_url}"
end
end
cap aborted!
Don't know how to build task 'deploy:notify_revision' (see --tasks)
ゴニョゴニョしたけどなぜかタスクが読み取られず...
タスクを分けて実行
capistrano のタスクは `lib/capistrano/tasks/idobata_notify_revision.cap` に切り出して実行してみた。
config/deploy.rb
# 上で追加した奴は全部削除して...
after 'deploy:restart', 'idobata:notify'
lib/capistrano/tasks/idobata_notify_revision.cap を新規作成。
# user_name, user_repository, idobata_hook_url は自分のものに修正
namespace :idobata do
task :notify do
user_name = `git config --global user.name`.gsub("
", '')
current_revision = "`cat #{current_path}/current`"
github_path = "https://github.com/user_name/user_repository/tree/#{fetch(:branch)}"
source = "App was deployed by #{user_name} #{fetch(:rails_env)}deployed source tree: #{fetch(:branch)}"
idobata_hook_url = "https://idobata.io/hook/custom/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
on roles :all do
execute "curl --data-urlencode 'source=#{source}' -d format=html #{idobata_hook_url}"
end
end
end
最初、ファイル名を `.rake` で作成しても読み取られず、いろいろ見てたら Capfile に .cap の指定をしてました...
Dir.glob('lib/capistrano/tasks/*.cap').each { |r| import r }
はい、ごめんなさい...
あと、run じゃねーよ(NoMethodError: undefined method `run' for main:Object)!
とか、execute だけだと動かなかったりして on roles :all do ... end で囲ったりして上記で大丈夫そうでした!
おまけ
デプロイタスクをテストするのに、毎回デプロイするのダルいな...って思ってたら、そのタスクだけ実行できた。上記の場合だと...
cap production idobata:notify
って指定するとそのタスクを実行してくれる。はい、知りませんでした...
ってことで、デプロイタスクもいろいろ作っていこうと思います。