White Box技術部

WEB開発のあれこれ(と何か)

GitHub Enterprise上のRubyコードのカバレッジをCircleCI Enterpriseで集計し、結果をSlack通知する

カバレッジのSlack通知

こちらの内容を参考に、CircleCI Enterpriseでビルド時に集計したカバレッジを、Slack通知できるようにしました。

参考元のスクリプトではcoberturaとjacocoに対応していましたが、simplecovにも対応してあります。 あと、取得元をGitHub Enterpriseでも大丈夫なようにしてあります。

設定手順(SimpleCov利用の場合)

RubyプロジェクトでSimpleCovを使い、カバレッジを取得している場合の設定手順です。

1. Artifactsにカバレッジを保存

circle.xmlでtest実行後にカバレッジのあるcoverageディレクトリをArtifactsに移動(またはコピー)する。

test:
  post:
  - sudo mv coverage $CIRCLE_ARTIFACTS

2. CircleCIのプロジェクト設定

カバレッジ通知対象のCircleCIプロジェクトの設定画面を開き、以下の設定を行う。

API Permissions

PERMISSIONS > API Permissions で Create TokenボタンからBuild Artifactsのトークンを作成する(ラベル名は適当で良い)

Environment Variables

BUILD SETTINGS > Environment Variables で 以下の変数を設定する

Name Value
SLACK_ENDPOINT SlackのWebhook URL
CIRCLE_TOKEN 手順1で作成したトークン値
Test Commands

TEST COMMANDS > Test Commands の Post-test commands にGistに登録したシェルのパスを以下のように設定する

curl -s -L https://gist.github.com/seriwb/31d47a36a108183b1b5c33ae1f51b681/raw/circleci-coverage-slack.sh | bash -s
シェルのサンプル

実際には以下のシェルをコピーなどして、必要なURLを設定して利用して下さい。

3. ビルドする

対象プロジェクトがビルドされれば、Slackにカバレッジ結果が通知されます。

補足

  • GitHubとCircleCIのURLをスクリプト上にベタ書きしているのは、CircleCIでの変数設定を省略するためです
  • 参考元のコードはデフォルトがcoberturaになっていますが、simplecovに変更しています
  • 他のカバレッジを追加する場合は、calcRate関数にそれ用の処理を追加すればOKです
  • simplecovに関しては、CCIEにログインしていればカバレッジのHTMLに直飛び出来るreportリンクを追加しています