LoginSignup
1
2

More than 5 years have passed since last update.

Capistrano3でリリースディレクトリ名をGitのコミットハッシュ値にする

Posted at

ある日インフラのすごい人に
「イケてるデプロイシステムならリリースディレクトリ名はyyyyMMddHHmmssじゃなくてGitのコミットハッシュ値だよね〜」
とサラッと言われたので、サラッとできると思ってチャレンジしてみたら結局ゴリッとシェルを書いて解決した話です。

Capistrano側

config/deploy.rb
# リリースディレクトリ名の変更
set :release_hash, ENV['GIT_COMMIT']
Rake::Task["deploy:new_release_path"].clear 

namespace :deploy do
  desc 'set release path'
  task :new_release_path do
    set_release_path(fetch(:release_hash))
  end
end 

ちなみにCapistranoのバージョンは3.6.1ですが、おそらく3系であれば変わらないと思います。

デプロイ用のシェル

deploy.sh
if [ $# -eq 0 ]; then
  BRA="master"
else
  BRA=$1
fi
$BRA #ブランチ名を確認
VER=`git rev-parse --short $BRA`
$VER #コミットハッシュ値を確認
bundle exec cap production deploy BRANCH=$BRA GIT_COMMIT=$VER #Bundlerを使用しない場合はcap以降のみ

第一引数をブランチ名として、そのコミットハッシュ値を取得し、capコマンドに渡しています。

使い方

sh deploy.sh {branch名}
上記のコマンドで任意のブランチがその最新のコミットハッシュ値をディレクトリ名とするディレクトリにデプロイされます。
引数を指定しなかった場合はmasterがデプロイされます。

最後に

「イケてるデプロイシステムならリリースディレクトリ名はyyyyMMddHHmmssじゃなくてGitのコミットハッシュ値だよね〜」

これが本当にサラッと言われたので、Capistrano3単体でサラッと実現できるかと思いきや、できなかったという話です。
Capistrano3でできるもんだと思って色々調べてしまい、かなり時間をかけてしまいました。

参考

Capistrano3でリリースディレクトリをJSTにする方法
こちらのQiita記事がCapistrano3の内部処理も解説されており、とても参考になりました。

1
2
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
1
2