LoginSignup
41
23

More than 5 years have passed since last update.

Capistrano タスクの実行順序を確認する

Last updated at Posted at 2016-06-08

Capistranoのタスクの実際の動作を確認したい時に--dry-runを指定するのですが、その際に実際に実行するコマンドがサーバー台数分列挙して表示されるため、タスクの実行順序を確認したい際に苦労します。
そこで、タスクの実行順序のみを表示する方法を見つけたので、紹介します。

実行するコマンド

bundle exec cap development deploy --trace --dry-run 2>&1 | grep -E "\(first_time\)"

実行すると以下の様なタスク名が列挙されます。

** Invoke development (first_time)
** Invoke load:defaults (first_time)
** Invoke rbenv:validate (first_time)
** Invoke rbenv:map_bins (first_time)
** Invoke bundler:map_bins (first_time)
** Invoke deploy:set_rails_env (first_time)
** Invoke deploy:set_linked_dirs (first_time)
** Invoke deploy (first_time)
** Invoke deploy:starting (first_time)
** Invoke deploy:check (first_time)
** Invoke git:check (first_time)
** Invoke git:wrapper (first_time)
** Invoke deploy:check:directories (first_time)
** Invoke deploy:check:linked_dirs (first_time)
** Invoke deploy:check:make_linked_dirs (first_time)
** Invoke deploy:check:linked_files (first_time)
** Invoke deploy:set_previous_revision (first_time)
** Invoke deploy:started (first_time)
** Invoke deploy:updating (first_time)
** Invoke deploy:new_release_path (first_time)
** Invoke git:create_release (first_time)
** Invoke git:update (first_time)
** Invoke git:clone (first_time)
** Invoke deploy:set_current_revision (first_time)
** Invoke git:set_current_revision (first_time)
** Invoke deploy:symlink:shared (first_time)
** Invoke deploy:symlink:linked_files (first_time)
** Invoke deploy:symlink:linked_dirs (first_time)
** Invoke deploy:updated (first_time)
** Invoke bundler:install (first_time)
** Invoke deploy:compile_assets (first_time)
** Invoke deploy:assets:precompile (first_time)
** Invoke deploy:assets:backup_manifest (first_time)
** Invoke deploy:cleanup_assets (first_time)
** Invoke deploy:normalize_assets (first_time)
** Invoke deploy:migrate (first_time)
** Invoke deploy:migrating (first_time)
** Invoke deploy:publishing (first_time)
** Invoke deploy:symlink:release (first_time)
** Invoke deploy:published (first_time)
** Invoke deploy:finishing (first_time)
** Invoke deploy:cleanup (first_time)
** Invoke deploy:finished (first_time)
** Invoke deploy:log_revision (first_time)

解説

仕組みとしては、---dry-runで実際の流れを追いつつも、--traceでタスクの呼び出しを出力されるようにしています。
ここで、出力されるtraceのログは"** Invoke"や"** Execute"という形で標準エラー出力に出力されるので、2>&1でエラー出力を標準出力にリダイレクトさせてます。

あとは、サーバ台数分の"** Invoke"や"** Execute"が出力される中から、** Invoke bundler:map_bins (first_time)というように"(first_time)"が記載されたログのみを抽出するようにします。

afterbeforeといったフックで複雑化したり、gemでそもそもどのタイミングなのかわかりづらく、全体の実行順序を把握しづらいCapistranoのタスクですが、これで把握できるようになります!

41
23
0

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
41
23