🛠️ Spring Framework 講座【特別編】クラウド環境とCI/CD!〜GitHub Actionsによる自動化〜

docs

前回、Spring Batchを使った確実なデータ処理の技術を学びました。これまでの講座で、私たちはコードを書き、テストし、コンテナ化する(Docker)、という一連のプロセスを学びました。

しかし、現代の開発現場では、これらの作業は手動ではなく、**継続的インテグレーション(CI)継続的デリバリー(CD)**によって自動化されています。この自動化されたパイプラインが、クラウド環境への迅速かつ確実なデプロイを可能にします。

今回は、最も広く使われているCI/CDツールの一つである GitHub Actions を利用して、Spring Bootアプリケーションの「テスト」「ビルド」「Dockerイメージの作成」を自動化する方法を学びます。


1. CI/CDの概念

  • CI(Continuous Integration: 継続的インテグレーション): 開発者がコードを共有リポジトリ(GitHubなど)に統合(コミット)するたびに、自動的にビルドとテストを実行し、不具合を早期に発見するプラクティスです。
  • CD(Continuous Delivery/Deployment: 継続的デリバリー/デプロイメント): CIが成功した後、いつでもリリースできる状態(デリバリー)または本番環境へ自動でリリース(デプロイメント)までを行うプロセスです。

CI/CDパイプラインは、これらのステップを自動で実行する「ワークフロー」として定義されます。

2. GitHub Actionsの基本

GitHub Actionsは、GitHubに統合されたCI/CDプラットフォームです。リポジトリでのイベント(プッシュ、プルリクエストなど)をトリガーとして、任意のワークフローを実行できます。

2-1. ワークフロー(Workflow)

GitHub Actionsの処理は、YAMLファイルとしてリポジトリの .github/workflows ディレクトリ内に定義されます。

  • name: ワークフローの名前。
  • on: ワークフローを実行するトリガーとなるイベント(例:pushpull_request)。
  • jobs: 実行されるべき一連のタスク(ジョブ)。各ジョブは仮想環境上で実行されます。

2-2. ジョブとステップ(Job and Step)

各ジョブの中には、順番に実行されるステップが定義されます。

構成要素役割
runs-onジョブを実行する仮想環境(例:ubuntu-latest)。
stepsジョブ内で実行される具体的なコマンドやアクション。
usesGitHub Actions Marketplaceにある既存のアクション(事前定義されたタスク)を利用する(例:Javaのセットアップ、Dockerログイン)。

3. Spring Bootアプリケーション向けCIワークフローの例

ここでは、main ブランチへのプッシュ時に「テスト」と「ビルド」を実行するシンプルなワークフローを定義します。(ファイル名: .github/workflows/ci.yml)

YAML

name: Spring Boot CI Pipeline

# 1. 実行トリガーを定義
on:
  push:
    branches:
      - main # mainブランチへのプッシュで実行
  pull_request:
    branches:
      - main # mainブランチへのPRでも実行

# 2. 実行するジョブを定義
jobs:
  build-and-test:
    name: Build & Test
    # Ubuntuの最新環境で実行
    runs-on: ubuntu-latest

    steps:
      # 3. リポジトリのコードをチェックアウト
      - uses: actions/checkout@v4

      # 4. Java環境のセットアップ
      - name: Set up JDK 17
        uses: actions/setup-java@v4
        with:
          java-version: '17'
          distribution: 'temurin'
          cache: 'gradle' # Gradleキャッシュを有効化

      # 5. アプリケーションのビルドとテスト実行
      - name: Build with Gradle and Run Tests
        # --no-daemon でクリーンに実行
        run: ./gradlew build --no-daemon
        
      # 6. ビルドされたJARファイルを成果物として保存(オプション)
      - name: Archive production artifacts
        uses: actions/upload-artifact@v4
        with:
          name: spring-app-jar
          path: build/libs/*.jar

4. Dockerイメージのビルドとプッシュ(CDの一部)

CIが成功した後、続けてDockerイメージを作成し、レジストリ(Docker Hubなど)にプッシュするステップを追加することで、CDの基盤が整います。

YAML

  # build-and-test ジョブの後に実行するジョブを追加
  docker-publish:
    name: Docker Build and Push
    runs-on: ubuntu-latest
    # build-and-test ジョブが成功した場合のみ実行
    needs: build-and-test 
    
    steps:
      - uses: actions/checkout@v4
      - name: Log in to Docker Hub
        uses: docker/login-action@v3
        with:
          # GitHubのSecretに保存した認証情報を使用
          username: ${{ secrets.DOCKER_USERNAME }}
          password: ${{ secrets.DOCKER_PASSWORD }}

      - name: Build and Push Docker image
        uses: docker/build-push-action@v5
        with:
          context: . # Dockerfileが配置されている場所
          push: true
          tags: yourname/spring-app:${{ github.sha }} # コミットIDをタグとして使用

このワークフローが完成すれば、開発者がコードを main ブランチにプッシュするだけで、テストが走り、ビルドが完了し、最新のDockerイメージがレジストリに自動で公開されるようになります。

5. まとめ:DevOpsへの一歩

GitHub Actionsは、Spring Boot開発者が**DevOps(開発と運用の融合)**のプラクティスを実践するための最も手軽で強力なツールです。CI/CDパイプラインの自動化は、アプリケーションのリリース速度と信頼性を向上させる現代開発の必須スキルです。

✅ 本日のまとめ

  • CI/CDは、コードの変更からデプロイまでを自動化し、迅速なリリース不具合の早期発見を可能にする。
  • GitHub Actionsは、YAMLファイル(ワークフロー)として定義され、pushpull_request などのイベントをトリガーに実行される。
  • ワークフローは、実行環境を定義する jobs と、具体的なタスクを行う steps で構成される。
  • actions/setup-javadocker/build-push-action などの既存の Actions を利用することで、ビルドやDocker操作を簡単に実行できる。
  • Dockerイメージのプッシュには、GitHubの Secrets 機能を使って認証情報(ユーザー名、パスワード)を安全に管理する。

【Spring Framework 50回講座 完】 📖✨

コメント

タイトルとURLをコピーしました