Edited at

Jenkinsで収集したカバレッジの変化情報をSlackに投稿する

More than 5 years have passed since last update.

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への通知を追加したりしていますが、なかなか便利でオススメです。