SpringBoot + JUnit + AWS Codebuild  で レポート作成

[前回](https://qiita.com/Richter-A/items/e2fda3397531a504d446) SpringBoot プロジェクトで JUnit のテストを行ってみました。
せっかくなので、テスト結果をAWSに保存するところまで試してみましょう。
流れとしては、
1. GitHub に push
2. その内容を CodeBuild でビルドとテストを実施
3. テストフェーズで作成されたテスト結果を AWS に保存して参照する

といった方法で利用する想定です。

## TL;DR

1. buildspec.yml にテスト結果の xml をレポートとして保存する設定を追加
2. CodeBuild のレポートグループから確認する

## 目次

[1.CodeBuild でビルドプロジェクトを作成](#1-CodeBuildでビルドプロジェクトを作成)
[2.buildspec.ymlの設定を追加](#2-buildspec.ymlの設定を追加)
[3.ビルド、テストを実行して結果の確認](#3-ビルド、テストを実行して結果の確認)

では早速始めましょう。

#1. CodeBuild でビルドプロジェクトを作成

ビルドを行うためのビルドプロジェクトを作成しましょう。

1. CodeBuild を検索
2. 左メニューの `ビルド` > `ビルドプロジェクト` > `ビルドプロジェクトを作成する`
3. 以下のパラメータを入力して `ビルドプロジェクトを作成する`

| key                      | val                                            |
| ------------------------ | ---------------------------------------------- |
| プロジェクト名           | 任意の名前を入力 (例:`testsample`)             |
| 説明                     | 任意の説明を入力                               |
| ビルドバッジを有効にする | false                                          |
| ソースプロバイダ         | GitHub                                         |
| リポジトリ               | パブリックリポジトリ                           |
| GitHub リポジトリ        | GitHub repository の url を入力                |
| 環境イメージ             | マネージド型イメージ                           |
| オペレーティングシステム | Amazon Linux 2                                 |
| ランタイム               | Standard                                       |
| イメージ                 | aws/codebuild/amazonlinux2-x86_64-standard:3.0 |
| イメージのバージョン     | 最新のバージョンを選択する                     |
| 環境タイプ               | Linux                                          |
| サービスロール           | 新しいサービスロール                           |
| ロール名                 | 任意のロール名を入力 (例: `testsample-role`)   |
| ビルド仕様               | buildspec ファイルを使用する                   |
| Buildspec 名             |                                                |
| バッチ設定を定義         | false                                          |
| アーティファクト タイプ  | アーティファクトなし                           |
| CloudWatch Logs          | true                                           | 


#2. buildspec.yml の設定を追加

buildspec.yml にレポート結果の設定を追加する。
SpringBootプロジェクトのルートに buildspec.yml を追加する。

```yml:buildspec.yml
version: 0.2

phases:
  build:
    commands:
      - echo start build at `date`
      - ./gradlew test
      - ls -la build/test-results/test
reports:
  test-report:
    files:
      - '*'
    base-directory: build/test-results/test
    discard-paths: no
```

定義した内容は、

**phases.build.commands**
ビルド時に実行するコマンドを定義する。 `./gradlew test` でテストを実行する。

**reports**
テストレポートの出力に関する設定

**test-report**
任意のレポート名を設定する。テスト結果を保存するレポートグループの名前になる。
作られるレポートグループは `<ビルドプロジェクト名>-<レポート名>` になる。

**files, base-directory**
レポート結果のファイルを指定する。**base-directory** からの相対パスを設定する。

**discard-paths**
filesで指定したファイルの階層構造を保持する、しないを設定する。
`no` に設定すると
`./build/test-results/test/TEST-com.sample.testsample.UserServiceTests.xml`
が
`./TEST-com.sample.testsample.UserServiceTests.xml`
として保存される。


#3. ビルド、テストを実行して結果の確認

設定が追加できたら実際に実行してみましょう。

1. CodeBuild を検索
2. 左メニューの `ビルド` > `ビルドプロジェクト` > 先ほど作成したプロジェクトを選択
3. ビルドを開始
4. ビルドが終わるまでしばし待つ (テストに失敗するケースが含まれるとビルド結果が失敗になりますが、レポートはできてます。)
5. ビルドが完了したら左メニューの `ビルド` > `レポートグループ`
6. 作成されているレポートグループを選択

これでテスト結果が確認できます。