KotlinプロジェクトをTravis CIで回し、カバレッジをCoverallsで見る
でTravis CIを回していたのですが、Kotlinでカバレッジを取ることができそうだったのでどうせならCoverallsで見られるようにしようと試行錯誤した記録です(結果だけまとめますが)。
Travis CI
まずTravis CIは簡単なのでざっくりと説明しますが、私は次のように「.travis.yml」ファイルを作成しました。sudoとかいるのか正直あまり良くわかっていませんが、こんな感じに書いています。
language: java sudo: false jdk: - oraclejdk7 script: - ./gradlew test
GitHubにpushする前にTravis CIの方でCIを回したいプロジェクトを選択します。
そして、GitHubにそのプロジェクトをpushすると自動的にTravis CIで指定したコマンドが動きます。
テストが通りうまく行けば次のように緑の画面になります。
また、よくGitHubにはってある次のようなバッチも
次の場所をクリックしてMarkdownを選択することで簡単に作ることができます。
Travis CIはこんな感じでできます。
Coveralls
Coverallsは少し苦労しました。基本的にはJaCoCoでカバレッジのレポートを作成し、それをCoverallsに送るだけになりますがいろいろとハマりどころがありました。
まずローカル環境でカバレッジを取ります。カバレッジにはJaCoCoを用いました。JaCoCoのGradleの設定は次の通りになります。
apply plugin: 'jacoco' jacocoTestReport { reports { xml.enabled true csv.enabled false html.enabled true } }
この設定の場合、XMLとHTMLでカバレッジの結果を出力します。設定後、
$ ./gradlew test jacocoTestReport
とすると、テストとカバレッジのレポートが作成されます。JaCoCOは必ずtestの後か、testと一緒に行ってください。
ここで、実は少しハマったのですが、JaCoCOのタスクがSKIPPEDとなりカバレッジレポートが作成されないことがありました。わたしの場合には、buildディレクトリーを削除することで無事動作するようになりました。
さて、次にCoverallsの設定になりますが、設定する際にはCoverallsでトークンを取得する必要があります。まずは、カバレッジを見たいプロジェクトを設定します。
そうすると、次のような画面になりトークンが表示されます(写真ではぼかしています)。
このトークンの設定を先に行います。このトークンはGitHub上にアップしないとCoverallsが動きませんが、だれでもトークンを見ることができる状況になってしまいます。それを防ぐためにTravisのツールを用いてトークンを暗号化します。
これに関しては
次のサイトを参考にしました。
まずtravisのモジュールをダウンロードします。
$ sudo gem install travis
そして、このツールを用いてトークンを暗号化します。
$ travis encrypt COVERALLS_TOKEN=トークンをここに書く
そうすると標準出力にずらっと次のように暗号化された文字列が表示されます。
secure: "Gj9nNmjtg8Zk /* 省略 */ F/0="
この文字列を複写して「.coveralls.yml」ファイルを作成します。secureの項目に作成した暗号化文字列をコピーします。
env: global: - secure: Gj9nNmjtg8Zk /* 省略 */ F/0=
最後に、JaCoCoのレポートをCoverallsに送信するためのGradleのモジュールを導入します。build.gradleを抜粋します。
buildscript { ext.kotlin_version = '1.0.0-beta-2423' repositories { mavenCentral() } dependencies { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath 'org.kt3k.gradle.plugin:coveralls-gradle-plugin:2.4.0' } } apply plugin: 'com.github.kt3k.coveralls' coveralls { sourceDirs = files(sourceSets.main.allSource.srcDirs).files.absolutePath }
重要なのは最後の3行の設定で、これがないとソースファイルが無いぞ!的なエラーで怒られます。
これで、最後に「.travis.yml」の設定をしてGItHubにpushすると終了になります。
language: java sudo: false jdk: - oraclejdk7 script: - ./gradlew test after_success: - ./gradlew jacocoTestReport coveralls
今回はafter_successでカバレッジ作成、Coverallsに送信をしています。
成功すると次のような感じにカバレッジのレポートを見ることができます。
Travis CIと同様に次の場所をクリックすることでバッチ用のMarkdownを取得できます。
おまけ
今回、Coverallsへのレポートの送信がうまくいかず何度もGitHubにpushしまくったのですが、最後の方にローカルでCoverallsに送信する方法がわかり、それで行っていました。
参考にしたのは次のサイトです。
http://ksoichiro.blogspot.jp/2014/05/androidgradle-jacoco.html
例を挙げると、次のようなコマンドでできます。
COVERALLS_REPO_TOKEN=トークン ./gradlew coveralls
まとめ
疲れた。