CircleCIでAllureレポートのhistoryにレポートURLを含めたい
テスト自動化アーキテクトの森川です。
本日はニッチな自動テストに関するTipsをお送りします。
CircleCI上で自動テストのレポートツールAllureを利用する際のTipsです。
環境
・Java: AdoptOpenJDK1.8.232
・Gradle4.x
・Gradle Plugin : allure-plugin
・Junit5.x
問題
導入しやすく見やすいレポーティングができるAllure ReportはCircleCIでも利用できてOrbsも公開されています。
CircleCI Developer Hub - ayte/allure
ただ、このままでは過去ビルドのレポートが見れません。見るようにするにはひと手間が必要でした。
こちらについてはエントリー記事がありますので今回は触れません。
参考:自動テストのレポートツールAllure ReportのTips少々|SHIFT Group 技術ブログ|note
これで、過去の履歴が見えるようになりました。
でも便利になると更に欲が出てくるのが人間というものです。
実はこの状態では単に過去の実行結果がリストされているだけでリンクされていないため、過去レポートを見るにはCIのダッシュボードから辿ることになります。ご存知のとおりダッシュボードからArtifactsのページへの操作はとても面倒で萎えます。
そこで改善です。
履歴リストに過去レポートへ直接リンクしたい
過去レポートにさっとアクセスできるようにしてみましょう。
先人の知恵ということでGithub Actionsの「allure-report-action」を参考にさせていただきます。
executor.jsonにレポートURLをふくめて書き出して「allure-results」に置けば、よしなにしてくれるようです。
allure-report-action/entrypoint.sh #L47 / simple-elf/allure-report-action
CircleCIのconfig.ymlを書いてみました。
# (一部略)
jobs:
test-example:
executor:
name: default
steps:
- checkout
- run:
name: テスト実行
command: |
./gradlew clean test MyTestClass
mkdir -p build/reports/allure-report
echo "" > build/reports/allure-report/index.html
- store_artifacts:
name: 仮ファイルを保存
path: ~/repo/build/reports/allure-report/index.html
destination: allure-report/index.html
- run:
name: executor.json生成
command: |
echo "executor.json生成"
REPORT_URL=$(curl https://circleci.com/api/v1.1/project/github/${CIRCLE_USERNAME}/${CIRCLE_PROJECT_REPONAME}/${CIRCLE_BUILD_NUM}/artifacts -H "Circle-Token: ${API_TOKEN}" | grep -o 'https://[^"]*index\.html')
echo '{"name":"CircleCI","type":"circleci","reportName":"Test Report",' > executor.json
echo "\"url\":\"${CIRCLE_REPOSITORY_URL}\"," >> executor.json
echo "\"reportUrl\":\"${REPORT_URL}\"," >> executor.json
echo "\"buildUrl\":\"${CIRCLE_BUILD_URL}\"," >> executor.json
echo "\"buildName\":\"CircleCI Build${CIRCLE_BRANCH} #${CIRCLE_BUILD_NUM}\"," >> executor.json
echo "\"Job Name\":\"${CIRCLE_JOB}\"," >> executor.json
echo "\"Build Number\":\"${CIRCLE_BUILD_NUM}\"}" >> executor.json
mv executor.json ./build/allure-results/
- run:
name: レポート生成
command: |
echo "過去レポートダウンロード"
mkdir -p build/allure-results/history
cd build/allure-results/history
curl -H "Circle-Token: $API_TOKEN" \
https://circleci.com/api/v1.1/project/github/${CIRCLE_PROJECT_USERNAME}/${CIRCLE_PROJECT_REPONAME}/${CIRCLE_PREVIOUS_BUILD_NUM}/artifacts \
| grep -o 'https://[^"]*history[^"]*\.json' \
| wget --verbose --header "Circle-Token: $API_TOKEN" --input-file - || true
echo "レポート生成"
cd ~/repo
./gradlew downloadAllure
chmod 775 ./.allure/allure-*/bin/allure
./.allure/allure-*/bin/allure generate build/allure-results -o /build/reports/allure-report
- store_artifacts:
name: レポート保存
path: ~/repo/build/reports/allure-report
destination: allure-report
それでは、処理の流れを見てみましょう。
テスト実行
・gradleでテスト実行をしています。特に変わったことはしていません
echo "" > build/reports/allure-report/index.html
・仮ファイルを出力しています(理由は後述)
仮ファイルを保存
・成果物のURLを取得するために仮ファイルをstore_artifactsで保管しています
https://{ビルド番号}-{謎の番号}-gh.circle-artifacts.com/0/path_to_artifacts
ArtifactのURLは上記のように謎の番号が含まれます。
この番号はGitHub(またはBitBucket)側で持っているリポジトリのIDらしいのですが、これを取ってくるよりも成果物をアップロードしてURLを取ってきたほうが早いよね、と思いました。
executor.json生成
・CircleCIのAPIからArtifactsのURLを取ってきてexecutor.jsonを書いてbuild/allure-resultsに置きます
・Jsonのバリデーションが辛いのでローカルでこの部分だけ叩いてチェックすることをお薦めします
レポート生成
・ふたたびAPIで前回のビルドから過去分のレポート情報を取ってきて「allure-results/history」に突っ込んでやります
・レポートを生成します
./gradlew downloadAllure # 👈 ダウンロードのみにする
#./gradlew allureReport # 👈これはうまくいかない
このときgradleプラグインのallureReportタスクで生成するとexecutor情報が上書きされるようなのでダウンロードだけにしています。
./.allure/allure-*/bin/allure generate build/allure-results -o /build/reports/allure-report
Allureコマンドラインでレポートを生成しています。
最後にstore_artifactsでレポートを成果物として保管しておしまいです。
ご覧の通り、リンクになりましたね。
やってみた感想など
これで過去レポートの閲覧が少し楽になりました。
原因調査のときにもちょっとした助けになることでしょう。
レポートにビルド画面のリンクが表示されるのは地味に便利でした。そして、レポートのURLはそのままSlack通知等に利用できそうですね。
パイプライン作成の「あるある」
Jsonのバリデーションや、相対パスの記述ミスなどで、失敗回数が膨れ上がります。作業効率化のネタはいくつか抑えておいたほうが良さそうです。
パイプライン作成時に心がけたいTips
・CLIバリデータでYamlの記述ミスをチェック
CircleCI のローカル CLI の使用 - CircleCI
・setコマンドでデバッグ
・挙動不明の場合はRerun For SSHで中に入って調べる
参考
_________________________________
執筆者プロフィール:森川 知雄
中堅SIerでテスト管理と業務ツール、テスト自動化ツール開発を12年経験。
SHIFTでは、GUIテストの自動化ツールRacine(ラシーヌ)の開発を担当。
GUIテストに限らず、なんでも自動化することを好むが、ルンバが掃除しているところを眺めるのは好まないタイプ。
さまざま案件で自動化、効率化によるお客様への価値創出を日々模索している。2021年からは技術イベントSHIFT EVOLVEの運営を担当。
【FREE】お役立ち資料ダウンロード
【RECRUIT】
お問合せはお気軽に
https://service.shiftinc.jp/contact/
SHIFTについて(コーポレートサイト)
https://www.shiftinc.jp/
SHIFTのサービスについて(サービスサイト)
https://service.shiftinc.jp/
SHIFTの導入事例
https://service.shiftinc.jp/case/
お役立ち資料はこちら
https://service.shiftinc.jp/resources/
SHIFTの採用情報はこちら
https://recruit.shiftinc.jp/career/