のべラボ.blog

Tech Blog | AWS や サーバーレスやコンテナ などなど

今さらながら GitHub Actions をさわってみる: (Javaのビルド編)

さて前回から GitHub Actions のワークフローいろいろと触っているのですが、今回はその続きとしてシンプルな Java の Webアプリケーションをビルドするワークフローを作成してみます。

とはいえ、GitHub Actions の初心者としては、ワークフローの YAML をどう記述すればいいのか、わかりません。

しかし、下記のドキュメントの内容が参考になりました。

docs.github.com

GitHub Actions には スターターワークフロー という事前定義済のワークフローがいくつか用意されており、その中に MavenJava アプリケーションをビルドするものもあるようです。(他にも、ビルドに Gradle や Ant を使うものもあるようです。)

docs.github.com

これを使えば、一から ワークフローの 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 については下記に説明がありますので、参考にしてください。

docs.github.com

また、一番最後に下記のステップを追加しました。

    - 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 に変更できないだろうか? と思い、調べてみました。

結果、下記の情報をみて可能であることがわかりました!

github.com

この情報を参照し、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.com


今回の所感

これまで自分が経験したことがないものを一から作るときは、お手本 があると助かりますよね。

スターターワークフローは、まさにその お手本 として利用することができました。

これで、GitHub Actions のワークフローでアプリケーションのビルドを行うための基本的な方法は理解できました。

次回は、AWS の環境へのデプロイを念頭に、どのように AWS アカウントに接続、連携できるのかを調べて記事にしたいと思います!


/* -----codeの行番号----- */