以下の記事の続きで、今回はGithubActionsを使ってみます。
https://qiita.com/kasa_le/items/1ce0d9e34f29e34835cb
Github Actions
Githubの各リポジトリの、[Actions]タブから設定/閲覧出来ます。
特徴
Github専用のCIツールです。
公式のActionももちろんありますが、それらもまたオープンソースで作っていく、というスタンスが、「らしい」ですよね。
ActionはMarketplaceで探すことが出来ます。
https://github.com/marketplace?type=actions
料金
publicなリポジトリでは利用制限はありません。
privateなリポジトリなどでは、従量課金制となっていますが、毎月無料範囲があります。
見積もり計算方法などは、こちらが参考になるかと思います。
https://qiita.com/euxn23/items/8cec3a3b8de9e3213424
無料利用であっても、Windows/Ubuntu/macOSが選べるのは非常に便利です。
実績
これからという感じですが、なんといってもMicrosoftがついたので、Azure Pipelinesでの知見などもあるでしょうし、今後確実に使われていくと思います。
ただ、逆に、Azure Pipelinesに統合されて消えてしまう可能性もあるかもしれませんよ?
設定
yml
ファイルにて行います。
プロジェクトのルート直下に、.github/wrokflows
というディレクトリを作成し、その配下に置きます。
最初に[Actions]タブをクリックすると、様々なテンプレートから選ぶことが出来、最初のコミットは上記のフォルダに対して行ってくれます。
テンプレートは、Mavenビルドは2つ見つかりますが、今回はビルドだけなので、赤枠の方を使いました。
最終的に目的を達成したymlはこちらになります。
Skip to content
Search or jump to…
Pull requests
Issues
Marketplace
Explore
@le-kamba
le-kamba
/
JerseySample
1
00
Code Issues 0 Pull requests 0 Actions Projects 0 Wiki Security Insights Settings
Update maven.yml
feature/for_github_actions @le-kamba 8ba108d
Java CI with Maven
on: push
Java CI with Maven
This run
Workflow file
.github/workflows/maven.yml
# This workflow will build a Java project with Maven
# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven
name: Java CI with Maven
on:
push:
branches: [ feature/for_github_actions ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up JDK 11
uses: actions/setup-java@v1
with:
java-version: '11.0.6'
- name: Build and Test with Maven
run: mvn clean install
- name: Archive JAR
if: always()
uses: actions/upload-artifact@v1
with:
name: repository
path: repository/target/repository.jar
- name: Archive WAR
if: always()
uses: actions/upload-artifact@v1
with:
name: serverapi
path: serverapi/target/serverapi.war
- name: Gather test results
if: always()
run: |
mvn site -DgenerateReports=false -Daggregate=true surefire-report:report-only
mkdir -p test-results/junit/
find . -type f -regex ".*/target/surefire-reports/.*xml" -exec cp {} test-results/junit/ \;
- name: Archive test resuls xml
if: always()
uses: actions/upload-artifact@v1
with:
name: test-results
path: test-results/junit/
- name: Archive test resuls html
if: always()
uses: actions/upload-artifact@v1
with:
name: test-results-html
path: target/site
ステップは見たまんまで他のCIツールとも大きく違わないので割愛しますが、ポイントだけ。
-
Set up JDK 11
ステップ- 公式アクションの
setup-java
を使っています。ただし、こちらだとZulu版のOpenJDKが採用されるようです(Zuluは基本有償ですが、Azureから使うと無償だったかで、その関係でしょうか)。AdoptOpenJDK版を作ってくださっている方もいるので、Marketplaceで探してみて使うのも良いでしょう。
- 公式アクションの
-
Gather test results
ステップ-
mvn site -DgenerateReports=false -Daggregate=true surefire-report:report-only
- JUnitテストレポートをページ上で見られないので(Workflowの成否でテスト失敗があったかどうかはわかりますが)、xmlをダウンロードしてきても人間の目には分かりづらいため、surefire-reportを使って出したhtml版の方も保存するようにしています。
-
-Daggregate=true
はサブモジュールの結果をまとめるオプションです。 -
site -DgenerateReports=false
は、CSSファイルやイメージファイルだけを出力させています。
-
mkdir
以降は、xml形式のJunit結果レポートをまとめてArtifactに上げられるようにするため、フォルダを作ってそちらに全部コピーしているステップです。(後述の通り, Artifactに上げる際に、正規表現やワイルドカードが使えないため、一つのディレクトリにまとめています)
-
追記 2020/03/25
この書き方だと、テストに失敗があってもビルド成功が報告されてしまうので、他の方法を考えないとダメみたいです。困った・・・
追記2020/03/27
テストのエラーを検知しつつ、surefireが出すhtmlレポートを出せるようになったので、そのパターンのymlに修正しています。
感想
Androidビルドでも触っていて(https://qiita.com/kasa_le/items/5feb953cd50489c30c90 )、馴染みがあったのでこれまでの2つ(AppVeyor, CircleCI)よりは設定を楽に出来ました。
surefireのレポートでは少しハマりましたが。
テスト結果をActionsのページ上で見られると楽なのですがね。今はいちいちダウンロードして解凍してからじゃないと見られないので、それが手間です。
Github Pagesにsurefireの吐き出したhtmlを上げることで可能にならないかなあと思っているのですが、まだ詳しく調査はしていません。
そうそう、Artifactのパスが、CircleCI同様、正規表現やワイルドカードが使えないようで、そのへんは不便ですね。