0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GitHub ActionsでJavaプロジェクトのCI/CDを回す

Posted at

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に保存

成果物確認方法

  1. Actionタブを開く
  2. 左の一覧よりActionsの左サイドバーから街頭のワークフローを選択
  3. workflow runsから実行の名前を選択

Untitled-2.jpeg

Artifactsの成果物を確認する

  1. Actiohsタブを開く
  2. 対象のワークフロー実行を選択
  3. 右上に表示されるArtifactsセクションをクリックする
    動確.jpg

プルリクエストにテスト結果が反映される

  • 緑のチェックマーク:全てのテストやジョブが成功した場合、プルリクエスト画面のステータス部分に緑のチェックマークが表示される
  • 赤いバツ:テストやジョブのいずれかが失敗した場合、赤いバツが表示される

66B37578-4EBB-44E4-9260-30B83BE996E4_1_201_a.jpeg

プルリクエスト一覧にも表示される
F929F381-E2C4-4789-8AA4-37DBDDF9CCBE_1_201_a.jpeg

詳細情報へのリンク

2024-12-21 19.41の画像.jpg

ダウンロード方法

  1. プルリクエストやコミットページからActionsタブを開く
  2. 実行されたワークフローを選択
  3. 右上のArtifactsセクションでアップロードされたファイル名をクリック
  4. ZIPファイルがダウンロードされる
  • 保存期間:GitHub Actionsでアップロードされたアーティファクトは、デフォルトで90日間保持される
  • テストが失敗した場合でもダウンロード可能:ワークフローの if: always() 条件を使うことで、失敗時でも結果をアップロードできる
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?