Github ActionsでJavaのテスト(Junit)を自動化してみた
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を作ります。
-
Eventとは
Eventとは、Workflow実行のトリガーです。githubの特定のアクティビティ(push, pull request, forkなど)が対象です。イベントの一覧は以下のサイトをご覧ください。
参考:ワークフローをトリガーするイベント -
Workflowとは
Workflowとは、1つ以上のJobをまとめたものです。
設定はyamlファイルに記載します。1つのWorkflowに1つのyamlファイルを作成します。
yamlファイルはgitリポジトリ内の .github/workflowsに配置します。 -
Jobとは
Jobとは、1つ以上のStep(4.で説明)をまとめたものです。
複数のJobを同時並走することも可能です。JobA終了後、JobBと順番に実行することも可能です。
また、JobごとにRunner(5.で説明)を指定することも可能です。 -
Stepとは
Stepとは、Jobの中で実行されるタスクです。
Stepの中で実行したい処理を順番に実施します。ハンズオンではRunnnerにリポジトリコピー、Javaの環境をセットアップしmaven build、JUnitテストを順番に実施します。 -
Runnerとは
Runnerとは、Jobを実行するマシンです。Ubuntu, macOS, windows serverから選択可能です。
ハンズオン
Junit テストコード作成
- EclipseでSpringスタータープロジェクト作成します。
- 以下のテストコードを作成します。足し算のコードになります。
package com.example;
public class Calculate {
public int add(int x, int y) {
return x + y;
}
}
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実行
# 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