mokemokechicken氏の gitでPushする度にKarma-CoverageのCoverageの値をJenkinsで計測し、その増減をIdobataに投稿する に触発されて、最近自分のチーム内情報共有に活用している Slack でもやってみました。
Gitlab + Jenkins + 何かしらのCoverage + Slack という組み合わせになります。
ここでは JenkinsでNode.jsのテスト&カバレッジレポートを管理する で出力したカバレッジ情報を使っていますが、Cobertura形式であればプロジェクトの言語は問わないはずです。
できること
gitのcommit treeを考慮した上で前回のカバレッジ結果からの変化を計算し、増加・変化なし・減少の3パターンの報告をSlack上の指定のchannelに投稿します。
「Open」の部分はJenkins上の特定ビルドへのリンクとなっていて、詳細がすぐに確認できるようになっています。
これにより、テストコードを書かずにpushするとカバレッジを下げたことがチーム内で晒されるので、ツッコミを受けないよう頑張る方向に意識が働くようになります。たぶん。
設定手順
Gitlabへのpush -> Jenkinsのビルド実行、カバレッジ情報出力までの手順は割愛します。
GitLab と Jenkins を連携する (1)
JenkinsでNode.jsのテスト&カバレッジレポートを管理する
あたりを参考にしてください。
また、gitでPushする度にKarma-CoverageのCoverageの値をJenkinsで計測し、その増減をIdobataに投稿する のJenkinsの設定までを行っておきます(特にRubyのインストール)。
Slackの設定
Slackのintegration設定のページに行き、Jenkins CIを追加します。
channelを選択し、「Add Jenkins Integration」ボタンを押します。
ここでとりあえずデフォルトのchannelは設定しますが、実際には投稿時に変更可能です。
その後、Jenkins側の設定のインストラクションが表示されますが、無視してOKです。
重要なのは、左のメニュー下部に表示されるtokenで、これをコピーしておきます。
Jenkinsのビルド手順の追加
Jenkinsのジョブ設定でビルド手順の追加を行い、単体テストを行った後に以下のシェルスクリプトを記載します。
環境変数の各部分は、自分のドメインやtokenに置き換えてください。
export COVERAGE_DIR=.coverage
export SLACK_ENDPOINT=https://<YOUR_SLACK_TEAM_DOMAIN>.slack.com/services/hooks/jenkins-ci
export SLACK_TOKEN=<YOUR_SLACK_TOKEN>
export SLACK_CHANNEL=<YOUR_SLACK_CHANNEL>
curl -s -L https://gist.githubusercontent.com/u-minor/d285e58a5c92e54d7188/raw/cobertura_slack.sh | sh -s coverage/cobertura-coverage.xml
スクリプトの内容について
基本的な処理内容は、
gitでPushする度にKarma-CoverageのCoverageの値をJenkinsで計測し、その増減をIdobataに投稿する
に記載のスクリプトとほぼ同一です。
相違点は、
- レポートファイルを新規に
COVERAGE_DIR
の場所に複製し、履歴はこのディレクトリで管理している- レポートファイルがあるディレクトリがcleanされても大丈夫なように
- idobataからslackへの投稿に切り替えている
となります。
おまけ
Slackへの投稿は、シンプルなテキスト投稿の他に、今回のような複雑なフォーマットのメッセージを投稿することができます。
背景色を変えることはできませんがcolor barで似たような表現が実現できるので、活用範囲は広そうです。
監視スクリプトをちょっと改変して、障害等の際にメールでの通知の他にSlackへの通知を追加したりしていますが、なかなか便利でオススメです。