Springboot+GradleのアプリケーションをWercker/Codecov連携する
やること
SpringBoot+Gradleで作ったアプリケーションをWercker/Codecovと連携させてCI環境を作ります。
Wercker : ビルド・デプロイ環境を提供するCIサービスです。類似のサービスにCircleCIやTravisCIがありますが無料で使える枠が大きいのとDockerイメージが使えるので今回はこれをビルド環境に使ってみます。
http://www.wercker.com/Codecov : テストカバレッジを計測するCIサービスです。テストレポート作成にはJacocoというライブラリを使います。類似のサービスにはcoverallsがありますが、codecovを勧める記事が多かったので今回はこれを使ってみました。
https://codecov.io/gh
実行環境
- Windows10
- Java8
Wercker環境構築
準備
SPRING INITIALIZR等を使って適当なSpringBootアプリケーションを作成します。
https://start.spring.io/
レポジトリを作成したらGithub上にPushしておきます。
アカウント作成
Githubアカウントを使ってwerckerアカウントを作成します。
https://app.wercker.com/sessions/new
先ほどのレポジトリを選択してください。
定義ファイル作成
公式ドキュメントのガイドに従ってwercker.ymlを作成します(プロジェクトルートに配置)。
http://devcenter.wercker.com/docs/quickstarts/building/java
wercker.yml
# docker box definition box: id: openjdk ports: - "8080" # Build definition build: # The steps that will be executed on build steps: # A step that executes `gradle build` command - script: name: run gradle code: | chmod +x ./gradlew ./gradlew --full-stacktrace -q --project-cache-dir=$WERCKER_CACHE_DIR build
chmod
を追加していますが、なしで実行したところPermissionErrorが発生したので追加しています。
wercker.ymlをPUSHするとwercker上でビルドが実行されます。
Codecov環境構築
準備
Jacocoを使用するのでbuild.gradleに以下の記述を追加します。 デフォルトのjacocoTestReportタスクだとレポートがhtml形式なのでタスクを定義してXML形式で出力します。
apply plugin: 'jacoco' task codeCoverageReport(type: JacocoReport) { executionData fileTree(project.rootDir.absolutePath).include("**/build/jacoco/*.exec") reports { xml.enabled true xml.destination "${buildDir}/reports/jacoco/report.xml" html.enabled false csv.enabled false } classDirectories = fileTree(dir: './build/classes/main') sourceDirectories = files('src/main/java') }
Codecovアカウント作成
Werckerと同じようにGithubアカウントを使用してアカウント作成・レポジトリ連携を設定します。 完了画面でトークンが表示されるのでコピーしておいてください。 画面を閉じてしまった場合はレポジトリの画面からSettingsへ飛ぶと確認できたはずです。
定義ファイル更新
codecov用の定義を追加します。CODECOV_TOKENにはトークンを設定してください。
# docker box definition box: id: openjdk ports: - "8080" # defining the dev pipeline dev: steps: # A step that executes `gradle bootRun` command - script: name: run gradle code: | ./gradlew bootRun # Build definition build: # The steps that will be executed on build steps: # A step that executes `gradle build` command - script: name: run gradle code: | chmod +x ./gradlew ./gradlew --full-stacktrace -q --project-cache-dir=$WERCKER_CACHE_DIR build ./gradlew codeCoverageReport - script: name: post coverage to codecov code: | CODECOV_TOKEN={ここにトークンをペースト} bash <(curl -s https://codecov.io/bash) -t $CODECOV_TOKEN
wercker.ymlをPUSHするとwercker上でビルドが実行され、レポートがcodecovに連携されカバレッジレポートが表示されます。
以上です。