Java開発環境向け CI/CD構築(実践編)
この記事は、GitHub ActionsでHello Worldを動かしてみよう!初心者向け入門ガイド の続編です。
前回の記事では、GitHub Actionsを利用してシンプルなHello Worldのワークフローを構築する方法を解説しました。
今回は、Javaプロジェクトを対象にした実践的なCI/CD(継続的インテグレーションとデプロイ)の設定手順を紹介します。
概要
Java開発プロジェクトでは、以下を自動化することが求められます。
GitHub Actionsを活用して処理を実現する方法を段階的に説明します。
- ソースコードのビルド
- テストの実行
- 成果物の生成及びアーティファクト管理
- データベース(MySQL)のセットアップ
準備
- Javaプロジェクトのリポジトリ(Gradleをビルドツールとして使用する)
- Docker及びDocker Composeがセットアップされている環境
GitHub Actionsのワークフロー構築手順
ワークフロー定義ファイルの作成
.guthub/workflowsディレクトリにci.ymlファイルを作成し、以下を記述する。
name: Java CI with Gradle
on:
pull_request:
push:
branches:
- main
# アクション実行時にリポジトリのコンテンツに対する権限
permissions:
contents: read
# ワークフロー内のジョブ
jobs:
# 実行環境と手順を定義
build:
name: Create Archive
runs-on: ubuntu-latest
# 実行手順
steps:
- uses: actions/checkout@v3
- name: Set up JDK 17 and Gradle 8.1.1
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'adopt'
- name: Set up Gradle 8.1.1
run: gradle wrapper --gradle-version 8.1.1
# MySQLサーバーをdocker composeで起動
- name: Start MySQL Server
run: docker-compose up -d
- name: Build with Gradle
run: ./gradlew test
# ユニットテスト結果をGitHubにアップロードする
# if: always()失敗した時も常に実行する
- name: Archive unit test results
uses: actions/upload-artifact@v3
if: always()
with:
name: unit-test-report
path: build/reports/tests/test
ymlファイルのワークフロー構文
- name:(省略可能)ワークフロー名。GitリポジトリのActionタブに表示される
- on:アクションのトリガー
- pushやpull_requestでトリガーのタイミングを指定可能
- branches:トリガー対象のブランチを指定可能
- permissions:アクション実行時のリポジトリコンテンツに対する権限
- jobs:ワークフローファイルで実行されるすべてのジョブをグループ化している
- build:ジョブの名前。実行環境と手順を定義
- runs-on:ジョブを実行するマシンの種類を設定(ubuntu-latest:最新のUbuntu環境)
- steps:具体的なタスク(手順)
- uses:ジョブで指定するリポジトリ
- run:具体的なシェルで | を使えばパイプライン処理も可能
- run-name:pushやpull_requestイベントによってトリガーされるワークフローの場合、コミットメッセージとして設定される
- if:always():失敗した時も毎回実行する
解説
ジョブ定義
- buildジョブでCI/CDの主要処理を定義
重要なステップ
- actions/checkout@v3:リポジトリ内容を取得
- actions/setuo-java@v3:指定したバージョンのJDKをセットアップ
- docker-compose up -d:MySQLサーバをコンテナで起動
- ./gradleew build test:Gradleタスクでビルドとテストを実行
- actions/upload-artifact@v3:テスト結果をGitHubに保存
成果物確認方法
- Actionタブを開く
- 左の一覧よりActionsの左サイドバーから街頭のワークフローを選択
- workflow runsから実行の名前を選択
Artifactsの成果物を確認する
プルリクエストにテスト結果が反映される
- 緑のチェックマーク:全てのテストやジョブが成功した場合、プルリクエスト画面のステータス部分に緑のチェックマークが表示される
- 赤いバツ:テストやジョブのいずれかが失敗した場合、赤いバツが表示される
詳細情報へのリンク
ダウンロード方法
- プルリクエストやコミットページからActionsタブを開く
- 実行されたワークフローを選択
- 右上のArtifactsセクションでアップロードされたファイル名をクリック
- ZIPファイルがダウンロードされる
- 保存期間:GitHub Actionsでアップロードされたアーティファクトは、デフォルトで90日間保持される
- テストが失敗した場合でもダウンロード可能:ワークフローの if: always() 条件を使うことで、失敗時でも結果をアップロードできる