Things of interesting

プログラミングに関する技術ネタの備忘録

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が発生したので追加しています。 f:id:hnakanoya:20171017184300p:plain

wercker.ymlをPUSHするとwercker上でビルドが実行されます。 f:id:hnakanoya:20171017190100p:plain

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アカウントを使用してアカウント作成・レポジトリ連携を設定します。 完了画面でトークンが表示されるのでコピーしておいてください。 f:id:hnakanoya:20171017191700p:plain 画面を閉じてしまった場合はレポジトリの画面から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に連携されカバレッジレポートが表示されます。

以上です。