📝

Github ActionsでJavaのテスト(Junit)を自動化してみた

2023/06/11に公開

CI/CDはテストやデプロイを自動化する便利なものとは知っているけど、具体的にどう実装するんだろう。と思ったので実際にやってみました!
アプリ開発初心者なので基本的な内容になります。

対象読者

  • GitHub Actionsを聞いたことがあるけど概要を知りたいエンジニア
  • テスト(junit)をGitHub ActionsでCI/CDに組み込んでみたいエンジニア

ゴール

  • GitHub Actionsの概要がわかる
  • テスト(junit)をGitHub Actionsを使ってCI/CDに組み込める

GitHub Actionsとは

GitHub Actionsとは、GitHub社が提供するソースコードのテスト、ビルド、デプロイ等を自動化するCI/CDサービスです。
参考:GitHub Actions

GitHubの仕組み

git push, pullなどのEventを受けてWorkflow内のJobが実行される仕組みです。後半のハンズオンではgit pushでmaven build、Junitのテストを実行するWorkflowを作ります。

  1. Eventとは
    Eventとは、Workflow実行のトリガーです。githubの特定のアクティビティ(push, pull request, forkなど)が対象です。イベントの一覧は以下のサイトをご覧ください。
    参考:ワークフローをトリガーするイベント

  2. Workflowとは
    Workflowとは、1つ以上のJobをまとめたものです。
    設定はyamlファイルに記載します。1つのWorkflowに1つのyamlファイルを作成します。
    yamlファイルはgitリポジトリ内の .github/workflowsに配置します。

  3. Jobとは
    Jobとは、1つ以上のStep(4.で説明)をまとめたものです。
    複数のJobを同時並走することも可能です。JobA終了後、JobBと順番に実行することも可能です。
    また、JobごとにRunner(5.で説明)を指定することも可能です。

  4. Stepとは
    Stepとは、Jobの中で実行されるタスクです。
    Stepの中で実行したい処理を順番に実施します。ハンズオンではRunnnerにリポジトリコピー、Javaの環境をセットアップしmaven build、JUnitテストを順番に実施します。

  5. Runnerとは
    Runnerとは、Jobを実行するマシンです。Ubuntu, macOS, windows serverから選択可能です。

ハンズオン

Junit テストコード作成

  1. EclipseでSpringスタータープロジェクト作成します。
  2. 以下のテストコードを作成します。足し算のコードになります。
Calculate.java
package com.example;
public class Calculate {
	public int add(int x, int y) {
		return x + y;
	}
}
CalculateTest.java
package com.example;
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.Test;

class CalculateTest extends Calculate {
	@Test
	void testAdd() {
		Calculate cal = new Calculate();
		
		int expected = 5;
		int actual = cal.add(2, 3);
		
		assertEquals(actual, expected);
	}
}
ディレクトリ構成
/java_test3
├─ .github/
│  ├─ workflows/
│    ├─ main.yml
├─ java_test3/  → Eclipseが自動で作成
│  ├─ src/main/.../
│  │ ├─ Calculate.java
│  ├─ src/test/.../
│    ├─ CalculateTest.java

注意!
Eclipseでは自動でプロジェクト名のフォルダ(java_test3)が作成されます。java_test3配下のみファイル・フォルダ作成が可能です。
ただ、main.ymlはjava_test3配下に作るのではなく、.github/workflows/main.ymlに作る必要があるので、今回はgithub上で.github/workflows/main.ymlを直接作成しています。

Workflowの設定をyamlファイルで作成

以下4つの処理をyamlファイルに落とし込みます。
・Runnnerにリポジトリコピー
・Javaの環境をセットアップ
・maven build
・Test実行

main.yml
# Workflowの名前
name: java test

# Workflowを動かすトリガー(=Event)を指定。
# 今回はpushをEventに設定
on:
  - push

jobs:
  # build job
  build:
    # Runnerを指定
    runs-on: ubuntu-latest
    # Step
    steps:
      # RunnnerにGitリポジトリのコピーをダウンロード
      - uses: actions/checkout@v3
      # Java 17をセットアップ
      - name: Set up JDK 17
        uses: actions/setup-java@v3
        with:
          java-version: '17'
          distribution: 'temurin'
          cache: maven
      # maven build
      - name: Build with Maven
        run: mvn --batch-mode --update-snapshots package
        working-directory: ./java_test3
      # Test実行
      - name: Test with Maven
        run: mvn --batch-mode test
        working-directory: ./java_test3

参考:Building and testing Java with Maven
Githubの公式サイトで紹介されているJava build, testのyamlファイルです。

参考:Maven Commands
参考:20+ Maven Commands and Options (Cheat Sheet)
mavenコマンドについて解説しているサイトです。

動作確認

git pushし、git hubのリポジトリのページを見ると以下の通りgithub actionsで設定したbuild, testが成功しています!

buildをクリックするとStepごとの実行結果が表示され。build, testが成功していると確認できます。
BUILD SUCCESS → build成功
Tests Run: 2 → test成功

Discussion