概要
git branch -r --merged
を利用したチェックスクリプトを噛ませる
やりたいこと
- 最新のdevelop(またはmaster)ブランチの内容をmergeしてないfeatureブランチを開発環境に上げてしまうミスを無くしたい
- 上げたあとに気づいて再デプロイ&再テストするコストがかかる
経緯
- 「merge漏れしてるモジュールでテストしてしまっていて、実はデグレってました」とかがちょいちょいあった。
- 「基準ブランチに変更があったら、必ずfeatureブランチに取り込むこと」ってルールづけても、merge漏れを0にするのは不可能だから、何とかしたかった。
アプローチ
Jenkinsでjobを実行する際、build対象のブランチがmerge漏れを起こしていたら、そのbuildを失敗させる
merge漏れの定義
- 基準ブランチに含まれていて、build対象ブランチに含まれていないcommitが存在する
- fast-forward mergeができない状態
手順
- build対象のブランチが、基準ブランチの内容を含んでいるかどうかをチェックするスクリプトを用意する
- そのスクリプトをJenkins jobの前処理として実行する
- そのスクリプトのチェックに通ったときだけbuildを継続し、そうでない場合はbuildを失敗させる
チェックスクリプトの詳細
branch_validator.sh
# 基準ブランチ(e.g. origin/master)の内容がmerge済みなら、IS_BASE_MERGEDに"1"が入る
IS_BASE_MERGED=`git branch -r --merged | egrep -c 'origin/master'`
OK_FLG=1
if [ ${IS_BASE_MERGED} -ne ${OK_FLG} ] ; then
echo "please merge from base branch"
exit 1
else
echo "go ahead"
exit 0
fi
まとめ
ルールとGitおじさん頼りの運用を減らしていきましょう