今さらながら GitHub Actions をさわってみる: (Javaのビルド編)
さて前回から GitHub Actions のワークフローいろいろと触っているのですが、今回はその続きとしてシンプルな Java の Webアプリケーションをビルドするワークフローを作成してみます。
とはいえ、GitHub Actions の初心者としては、ワークフローの YAML をどう記述すればいいのか、わかりません。
しかし、下記のドキュメントの内容が参考になりました。
GitHub Actions には スターターワークフロー という事前定義済のワークフローがいくつか用意されており、その中に Maven で Java アプリケーションをビルドするものもあるようです。(他にも、ビルドに Gradle や Ant を使うものもあるようです。)
これを使えば、一から ワークフローの YAML ファイルを自分で作成する必要がないので、初心者としては助かります。
すでに手元で、Maven でビルドする Java の Webアプリケーションのソースが一式あるので、今回はこの Maven でビルドを行うスターターワークフローを使っていきます。
なお、この記事の内容は 2023年 2月時点で確認した内容に基づきます。
スターターワークフローの選択
GitHub のリポジトリのページで Actions タブを選択したとき、まだワークフローを 1つも作成していなければ自動的にスターターワークフローを選択できるページが表示されます。
1 つでもワークフローを作成すると、下図の赤枠にある [New workflow] をクリックすることで、スターターワークフローを選択できるページが表示されます。
下図は、[New workflow] をクリックした後のイメージです。
赤枠のパネルに、Java with Maven とありますね。
このパネル内の Configure をクリックすると、リポジトリに直接ワークフローの YAML を追加するためのページに遷移します。
ただ、今回は 手元の PC でローカルのリポジトリで編集して リモートに push するという流れにしていますので、このページでは YAML だけコピーして [Cancel Changes] ボタンを選択します。
スターターワークフローの YAML を少し編集する
リポジトリに ビルド対象の Spring Boot の Java アプリケーションのソースや、Maven でビルドするための pom.xml などを一式用意します。
そして、.github/workflows
フォルダにワークフローの YAML ファイルを作成します。
この YAML ファイルに、Java with Maven のスターターワークフローの内容をコピーしました。
ざっと内容をみると、ビルド用の JDK を用意して、Maven のコマンドでビルドしていることがわかりますね。
ただし、29行目以降はコメントアウトしました。
# This workflow will build a Java project with Maven, and cache/restore any dependencies to improve the workflow execution time # For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-maven # This workflow uses actions that are not certified by GitHub. # They are provided by a third-party and are governed by # separate terms of service, privacy policy, and support # documentation. name: Java CI with Maven on: push: branches: [ "main" ] pull_request: branches: [ "main" ] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Set up JDK 11 uses: actions/setup-java@v3 with: java-version: '11' distribution: 'temurin' cache: maven - name: Build with Maven run: mvn -B package --file pom.xml - name: list artifact run: ls -laR target # Optional: Uploads the full dependency graph to GitHub to improve the quality of Dependabot alerts this repository can receive # - name: Update dependency graph # uses: advanced-security/maven-dependency-submission-action@571e99aab1055c2e71a1e2309b9691de18d6b7d6
29行目以降はコメントアウトした理由は、今回は不要だから です。
29行目以降で実施しているのは、Dependency graph を作成するための処理です。この処理を正常に実行するためには、リポジトリの権限設定を変更しなければならないことがわかりました。
今回の目的はあくまで シンプルな Java のアプリケーションのビルドを行うワークフローを動かすことですので、Dependency graph は不要と判断しコメントアウトにしました。
なお、Dependency graph については下記に説明がありますので、参考にしてください。
また、一番最後に下記のステップを追加しました。
- name: list artifact run: ls -laR target
これは、Maven でビルドした後の生成物として、SpringBoot の Java のアプリケーションの JAR ファイルが生成されているかを確認するために追加したステップです。
これで準備が整ったので、commit した後、GitHubのリポジトリに push します。
下図のようにビルドが成功しました!
また、アプリケーションの JAR ファイルも Maven により生成されていることも確認できました。
Java の Distribution を Amazon Corretto に変更してみる
スターターワークフローを活用することで、短時間で Java をビルドするワークフローを構築できました。
このワークフローの内容をみてみると、28 行目から 23 行目に下記の記述があります。
- name: Set up JDK 11 uses: actions/setup-java@v3 with: java-version: '11' distribution: 'temurin' cache: maven
ステップの名前から、ビルド用の JDK をセットアップしていることはわかります。
また、JDK のディストリビューションに temurin
を指定していることもわかりますね。
このディストリビューションを Amazon Corretto に変更できないだろうか? と思い、調べてみました。
結果、下記の情報をみて可能であることがわかりました!
この情報を参照し、distribution:
の指定を corretto
に変更して再度ワークフローを実行します。
- name: Set up JDK 11 uses: actions/setup-java@v3 with: java-version: '11' distribution: 'corretto' cache: maven
特に問題なくビルドが完了しました!
なお、今回使用した Java アプリケーションのソースや、Maven の pom.xml 、ワークフローの YAML ファイルは下記になります。
今回の所感
これまで自分が経験したことがないものを一から作るときは、お手本 があると助かりますよね。
スターターワークフローは、まさにその お手本 として利用することができました。
これで、GitHub Actions のワークフローでアプリケーションのビルドを行うための基本的な方法は理解できました。
次回は、AWS の環境へのデプロイを念頭に、どのように AWS アカウントに接続、連携できるのかを調べて記事にしたいと思います!