GithubActions
を使ってGithub上でリソースを管理しているJavaアプリのテストを自動化してみる。
今回はGithubActionsの触りということで、簡単なUnitテストのみやってみる。
初期状態
Githubの以下の構成からスタート。
RepositoryRoot
/SampleJavaApp(EclipseJavaプロジェクト)
/src/main/java
Sample.java
/src/test/java
SampleTest.java
/gradle/wrapper
gradle-wrapper.jar
gradle-wrapper.properties
build.gradle
gradlew
gradlew.bat
Gitリポジトリの下にJavaアプリリソースを管理するEclipseプロジェクトフォルダがある感じ。
main
ブランチから派生したブランチを作成し、
派生ブランチで以下の編集を行う。
ワークフロー定義を作成
リポジトリ直下に以下のファイルを作成
.github/workflows/JavaTest.yml
YAMLのファイル名はなんでもいい。
JavaTest.yml
の中身は以下の通り。
name: Java CI with Gradle
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
permissions:
contents: read
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
# アプリに合わせたJDKバージョンを指定
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'
- name: chmod gradlew
working-directory: ./SampleJavaApp
run: chmod +x gradlew
- name: build and test application
working-directory: ./SampleJavaApp
run: ./gradlew build
EclipseJavaプロジェクト配下のgredrewを実行する場合は、
working-directory
でEclipseJavaプロジェクトフォルダパスを指定する。
(gradlew実行の前に、chmod +x gradlew
を事前にやっとかないと動かなかった。)
上記を追加したGithubリポジトリは下記。
RepositoryRoot
/.github/workflows
JavaTest.yml ★これを追加
/SampleJavaApp(EclipseJavaプロジェクト)
/src/main/java
Sample.java
/src/test/java
SampleTest.java
/gradle/wrapper
gradle-wrapper.jar
gradle-wrapper.properties
build.gradle
gradlew
gradlew.bat
GithubにPUSH、ワークフローを確認
.github/workflows/JavaTest.yml
を追加した状態でコミット、GithubにPUSH。
すると、PRの画面に以下のような画面表示になる。
テスト結果も含めて、すべて正常に処理が完了すると以下の表示に変わる。
テスト失敗、もしくはワークフロー上でなんらかの失敗が発生すると以下の表示となる。
ワークフローの実行状態を見たいときはChecksタブ
かDetails
リンクをクリックする。
すると以下のような画面が表示される。
右側の背景が黒い画面で各ジョブの実行時の標準出力内容を展開表示できる。
✖となっている個所がワークフローで失敗した個所なので、ここをクリックして展開して原因などを調べる。
テスト結果レポートを保存する設定を追加
コンソールに表示された内容だけだと、テスト結果の内容が分かり辛いので、
ワークフロー定義ファイルにGradleテスト結果レポートを保存・取得できる設定を追加。
name: Java CI with Gradle
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
permissions:
contents: read
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'
- name: chmod gradlew
working-directory: ./SampleJavaApp
run: chmod +x gradlew
- name: build and test application
working-directory: ./SampleJavaApp
run: ./gradlew build
# ★以下の設定を追加
- name: save test reports as artifact
uses: actions/upload-artifact@v2
if: always()
with:
name: test-reports
path: SampleJavaApp/build/reports/tests/test
上記のupload-artifactアクション
でワークフローの成果物を保存できる。
if: always()
が無いとテストが失敗したときにワークフローが停止してレポート作成のステップが行われないので注意。
上記をPUSH後にActionsタブ
の間近のワークフロー実行結果をクリック。
ワークフロー実行結果ページのArtifacts
のところからテスト結果レポートがDLできる
とりあえずGithubActionsでJavaアプリテストするだけならさっくりできた。
chmod gradlew
とgredrewの実行
は同じステップで書けたかも。
今回使ったコードは下記
https://github.com/suganury/Sample