やりたいこと
ソースのビルドでこけた場合はjenkinsが自動でよしなにしてくれるが、
内製ツールで社内のテスト環境のDBのマイグレーションをしているのでそれがこけた場合には自動では開発者に正しく通知できない
社内のテスト環境とはいえ、マイグレーションがこけるとごみデータができたりテストをブロックしたりするので、迅速に通知したい
やったこと
DBのマイグレーションツールは結果をログに吐く
そこから対象ファイルを特定し、前回の成功したジョブ時点でのコミット以降にそのファイルに変更を加えた人にslackでメンションする
使ったもの
git rev-list --format=%cE ${GIT_PREVIOUS_SUCCESSFUL_COMMIT}..HEAD $line | grep 弊社のメールアドレスの@以降 | perl -pe 's/\@弊社のメールアドレスの@以降//g'| sort | uniq
| perl -pe 's/^(.*)$/\@$1/g'
- git rev-listで特定のファイルのあるコミットから現在までのコミッターのメールアドレスを抽出する
- そのうち@以前を抽出してslackのIDにする
スクリプト
cat migration.log | grep ERROR! | perl -pe なんかごちゃごちゃやって対象ファイルのパスを抽出する | xargs -I {} find . -name {} | perl -pe 's/\.\/(.*)/$1/g'> ERRORS
while read line
do
echo $line >> suspects
git rev-list --format=%cE ${GIT_PREVIOUS_SUCCESSFUL_COMMIT}..HEAD $line | grep 弊社のメールアドレスの@以降 | perl -pe 's/\@弊社のメールアドレスの@以降//g'| sort | uniq
| perl -pe 's/^(.*)$/\@$1/g' >> suspects
done < ERRORS
jenkinsのslack notification pluginの設定
「高度な設定」(Advanced Settings)の
「Include Custom Message」にチェックを入れ、以下のイメージでメッセージを設定した
$ENV へのDBスクリプトの適用が完了しました。
コミット$GIT_COMMIT まで適用されています。
やらかしたかもしれない人リスト↓
${FILE, path="suspects"}