前回、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: ワークフローを実行するトリガーとなるイベント(例:
push、pull_request)。 - jobs: 実行されるべき一連のタスク(ジョブ)。各ジョブは仮想環境上で実行されます。
2-2. ジョブとステップ(Job and Step)
各ジョブの中には、順番に実行されるステップが定義されます。
| 構成要素 | 役割 |
| runs-on | ジョブを実行する仮想環境(例:ubuntu-latest)。 |
| steps | ジョブ内で実行される具体的なコマンドやアクション。 |
| uses | GitHub 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ファイル(ワークフロー)として定義され、
pushやpull_requestなどのイベントをトリガーに実行される。 - ワークフローは、実行環境を定義する jobs と、具体的なタスクを行う steps で構成される。
actions/setup-javaやdocker/build-push-actionなどの既存の Actions を利用することで、ビルドやDocker操作を簡単に実行できる。- Dockerイメージのプッシュには、GitHubの Secrets 機能を使って認証情報(ユーザー名、パスワード)を安全に管理する。
【Spring Framework 50回講座 完】 📖✨


コメント