itamaeのgitリソースを実行したところ「deployブランチがすでに存在しているためcheckoutできませんでした」という旨のエラーが出ました。
その原因を調べたのでメモとして残しておきます。
エラーの原因
itamaeでgitリソースを実行するときに以下をともに満たしている場合、deploy branch already existという内容のエラーが発生します。
- checkoutしているブランチがdeployブランチ以外(masterとか)
- deployブランチはすでに存在している
コードを見てみるとわかりますが、基本的にdeployブランチにcheckoutした状態で実行しないといけないようです。
gitリソースの挙動
ざっくりいうと以下の順でリモートのソースコードを同期するようです。
- deployブランチをdeploy-oldブランチにrename
- git fetch(このときrevisionオプションを渡していないと常に最新のソースコードを取得する)
- deployブランチを作成してdeployブランチにチェックアウト
- deploy-oldブランチを削除
deployブランチ以外のブランチにcheckoutした状態で実行すると、以下の分岐に入らずdeployブランチがrenameされません。
その結果上記エラーが発生してしまいます。
if current_branch == DEPLOY_BRANCH
run_command_in_repo("git branch -m deploy-old")
deploy_old_created = true
end
というわけで、deployブランチにcheckoutしたところ正しく動作しました。
以上、メモでした。