LoginSignup
0
1

More than 3 years have passed since last update.

GithubActionsでMavenプロジェクトのCI

Last updated at Posted at 2020-03-19

以下の記事の続きで、今回はGithubActionsを使ってみます。
https://qiita.com/kasa_le/items/1ce0d9e34f29e34835cb

Github Actions

Githubの各リポジトリの、[Actions]タブから設定/閲覧出来ます。

githubactions.png

特徴

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に統合されて消えてしまう可能性もあるかもしれませんよ?:grin:

設定

ymlファイルにて行います。
プロジェクトのルート直下に、.github/wrokflowsというディレクトリを作成し、その配下に置きます。

最初に[Actions]タブをクリックすると、様々なテンプレートから選ぶことが出来、最初のコミットは上記のフォルダに対して行ってくれます。

テンプレートは、Mavenビルドは2つ見つかりますが、今回はビルドだけなので、赤枠の方を使いました。

github_actions_template.png

最終的に目的を達成したymlはこちらになります。

/github/workflows/maven.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同様、正規表現やワイルドカードが使えないようで、そのへんは不便ですね。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1