LoginSignup
8
10

More than 5 years have passed since last update.

Jenkinsでbuildするときにmerge漏れを検知する方法

Posted at

概要

git branch -r --mergedを利用したチェックスクリプトを噛ませる

やりたいこと

  • 最新のdevelop(またはmaster)ブランチの内容をmergeしてないfeatureブランチを開発環境に上げてしまうミスを無くしたい
    • 上げたあとに気づいて再デプロイ&再テストするコストがかかる

経緯

  • 「merge漏れしてるモジュールでテストしてしまっていて、実はデグレってました」とかがちょいちょいあった。
  • 「基準ブランチに変更があったら、必ずfeatureブランチに取り込むこと」ってルールづけても、merge漏れを0にするのは不可能だから、何とかしたかった。

アプローチ

Jenkinsでjobを実行する際、build対象のブランチがmerge漏れを起こしていたら、そのbuildを失敗させる

merge漏れの定義

  • 基準ブランチに含まれていて、build対象ブランチに含まれていないcommitが存在する
    • fast-forward mergeができない状態

手順

  1. build対象のブランチが、基準ブランチの内容を含んでいるかどうかをチェックするスクリプトを用意する
  2. そのスクリプトをJenkins jobの前処理として実行する
  3. そのスクリプトのチェックに通ったときだけ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おじさん頼りの運用を減らしていきましょう

8
10
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
8
10