カテゴリ: Quarkus 更新日: 2026/04/01

QuarkusとJenkinsで実現する最強のCI/CDパイプライン構築ガイド

JenkinsでQuarkusのCIパイプラインを構築
JenkinsでQuarkusのCIパイプラインを構築

先生と生徒の会話形式で理解しよう

生徒

「最近よく聞くQuarkusでWebアプリを作ってみたのですが、手動でビルドしてデプロイするのが大変になってきました。自動化する方法はありますか?」

先生

「それは素晴らしいステップアップですね!Quarkusはコンテナネイティブなフレームワークなので、Jenkinsを使ってCI/CDパイプラインを構築すると、開発効率が劇的に向上しますよ。」

生徒

「Jenkinsは聞いたことがありますが、Quarkus向けの設定って難しいんでしょうか?」

先生

「基本を押さえれば大丈夫です。テストの実行から、Quarkus特有のネイティブイメージ作成、 Dockerコンテナ化までの流れを自動化してみましょう。それでは、具体的な手順を解説していきますね!」

1. QuarkusにおけるCI/CDの重要性とJenkinsの役割

1. QuarkusにおけるCI/CDの重要性とJenkinsの役割
1. QuarkusにおけるCI/CDの重要性とJenkinsの役割

モダンなJava開発において、Quarkusはその圧倒的な起動速度とメモリ消費の少なさから、マイクロサービス開発のスタンダードになりつつあります。しかし、その性能を最大限に引き出すためには、ソースコードを修正するたびに自動的にテストを行い、実行可能なファイルを作成する「継続的インテグレーション(CI)」と、それを環境に配備する「継続的デリバリー(CD)」の仕組みが不可欠です。

Jenkinsは、世界中で最も利用されているオープンソースの自動化サーバーです。豊富なプラグインを利用することで、Gitリポジトリからのソースコード取得、MavenやGradleによるビルド、そしてDockerイメージの作成やKubernetesへのデプロイまでを一本の「パイプライン」として定義できます。QuarkusとJenkinsを組み合わせることで、開発者はコードを書くことだけに集中できるようになり、デプロイ作業に伴うヒューマンエラーを排除することが可能になります。

2. 事前準備と必要なツールのセットアップ

2. 事前準備と必要なツールのセットアップ
2. 事前準備と必要なツールのセットアップ

まずは、Jenkins上でQuarkusをビルドするための環境を整えましょう。最低限、以下のツールがJenkinsサーバーまたはビルドエージェントにインストールされている必要があります。これらが準備されていないと、パイプラインの実行中にエラーが発生してしまいます。

  • JDK 17以上(Quarkusのバージョンに合わせる)
  • Apache Maven または Gradle(ビルドツール)
  • Docker(コンテナイメージ作成用)
  • GraalVM(ネイティブイメージを作成する場合のみ)

Jenkinsの管理画面から「Global Tool Configuration」を開き、Mavenの設定を行っておきましょう。ここではMavenのインストールパスを指定し、パイプライン内で mvn コマンドが自由に使えるようにしておきます。また、Gitプラグインが有効になっていることも確認してください。これにより、GitHubやGitLabなどのリポジトリから最新のソースコードを自動的にプルできるようになります。

3. 最初のパイプラインコードを書いてみよう

3. 最初のパイプラインコードを書いてみよう
3. 最初のパイプラインコードを書いてみよう

Jenkinsでは「Jenkinsfile」というファイルに、ビルドの手順をコードとして記述します。これを「Pipeline as Code」と呼びます。まずは、ソースコードを取得してユニットテストを実行するだけのシンプルなパイプラインを作成してみましょう。これにより、コードに不備がないかを常にチェックする体制が整います。


// Jenkinsfile の基本構造(Declarative Pipeline)
pipeline {
    agent any
    
    stages {
        stage('ソースコード取得') {
            steps {
                // Gitからコードをチェックアウト
                checkout scm
            }
        }
        stage('ユニットテスト実行') {
            steps {
                // Quarkusのテストを実行
                sh './mvnw test'
            }
        }
    }
}

このスクリプトをリポジトリのルートに配置し、Jenkinsで「Pipeline」ジョブを作成してこのファイルを読み込むように設定します。テストが失敗した場合には、Jenkinsがすぐに通知をくれるため、バグの早期発見につながります。Quarkusの ./mvnw test コマンドは、非常に高速に動作するため、開発のリズムを崩さずに検証を行うことができます。

4. ビルドとアーティファクトの生成手順

4. ビルドとアーティファクトの生成手順
4. ビルドとアーティファクトの生成手順

テストが通過したら、次は実際に実行可能なファイルをビルドするフェーズに進みます。Quarkusには「JVMモード」と「ネイティブモード」の2種類がありますが、まずは標準的なJVMモードでのビルド設定を見てみましょう。このステップでは、quarkus-app フォルダに必要なライブラリがまとめられます。


// ビルドステージを追加した例
stage('パッケージング') {
    steps {
        // jarファイルの生成(テストは既に終わっているのでスキップ)
        sh './mvnw package -DskipTests'
    }
}

実行結果として、以下のようなログがJenkinsのコンソールに出力されれば成功です。


[INFO] --- quarkus-maven-plugin:3.x.x:build (default) @ quarkus-demo ---
[INFO] [io.quarkus.deployment.QuarkusAugmentor] Quarkus augmentation completed in 1500ms
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------

このように、Mavenの package コマンドを叩くだけで、Quarkusは最適化された実行ファイルを生成してくれます。生成されたファイルは、次のデプロイステージや、Dockerイメージ作成ステージで利用することになります。

5. Dockerイメージの自動作成とレジストリ登録

5. Dockerイメージの自動作成とレジストリ登録
5. Dockerイメージの自動作成とレジストリ登録

Quarkusの真価はコンテナ環境で発揮されます。Jenkinsパイプラインの中でDockerイメージを作成し、Docker Hubや社内のプライベートレジストリにプッシュする工程を追加しましょう。Quarkusには標準で src/main/docker/Dockerfile.jvm というファイルが用意されているので、これを活用します。


stage('Dockerイメージ作成') {
    steps {
        script {
            // Dockerイメージのビルドとタグ付け
            sh 'docker build -f src/main/docker/Dockerfile.jvm -t my-quarkus-app:${BUILD_NUMBER} .'
            // 本来はここで docker push などのコマンドを実行
            echo 'Dockerイメージのビルドが完了しました'
        }
    }
}

このステージを追加することで、ビルドが成功するたびに新しいバージョンのコンテナイメージが自動的に生成されます。${BUILD_NUMBER} というJenkinsの変数を使うことで、イメージにユニークなタグを付けることができ、問題が発生した際の切り戻し(ロールバック)も容易になります。Docker環境を準備する際は、JenkinsユーザーにDocker実行権限があることを確認しておきましょう。

6. ネイティブイメージビルドに挑戦する

6. ネイティブイメージビルドに挑戦する
6. ネイティブイメージビルドに挑戦する

Quarkusの最大の特徴である「ネイティブイメージ」のビルドを自動化する方法についても触れておきましょう。ネイティブイメージは起動が非常に速い反面、ビルドに多くのCPUとメモリ、そして時間を要します。Jenkinsサーバーのスペックに余裕がある場合に設定することをお勧めします。


stage('ネイティブビルド(高度な設定)') {
    steps {
        // コンテナを使用してネイティブビルドを実行(ローカルにGraalVMがなくても可能)
        sh './mvnw package -Pnative -Dquarkus.native.container-build=true'
    }
}

このコマンドを実行すると、Quarkusはビルド用のDockerコンテナを立ち上げ、その中でネイティブコンパイルを行います。これにより、ビルド環境に依存せずにネイティブバイナリを作成できます。作成されたバイナリは src/main/docker/Dockerfile.native を使って最小サイズのDockerイメージにパッケージングできます。これはクラウドネイティブな環境において、非常に強力な武器となります。

7. パイプラインをより堅牢にするエラーハンドリング

7. パイプラインをより堅牢にするエラーハンドリング
7. パイプラインをより堅牢にするエラーハンドリング

最後に、実際の運用で欠かせないエラーハンドリングについて説明します。ビルドが失敗したときに、単に止まるだけでなく、開発者に通知を送ったり、一時ファイルをクリーンアップしたりする処理が必要です。Jenkinsfileには post セクションを使って、実行結果に応じた処理を記述できます。


pipeline {
    agent any
    stages {
        // 各ステージの定義...
    }
    post {
        always {
            // 成功・失敗に関わらず実行
            echo '全ての工程が終了しました'
        }
        failure {
            // 失敗時のみ実行
            echo 'ビルドに失敗しました。ログを確認してください!'
            // ここで Slack などの通知を送る設定を入れると便利
        }
    }
}

このように、エラー時の挙動をあらかじめ定義しておくことで、トラブルの解決スピードが向上します。また、ビルドの履歴を整理するために、定期的なワークスペースの削除を行うプラグインなどと組み合わせるのも良いでしょう。Quarkusの開発体験は、こうしたCI/CDの整備によって、さらに洗練されたものへと進化します。自動化の恩恵を最大限に受けて、高品質なJavaアプリケーションをスピーディに届けましょう。

8. Jenkinsfileの全体構成イメージ

8. Jenkinsfileの全体構成イメージ
8. Jenkinsfileの全体構成イメージ

ここまで紹介した要素を一つのファイルにまとめると、以下のような構成になります。実際のプロジェクトに合わせて、環境変数やデプロイ先を調整して活用してください。


<!-- Jenkinsfileを管理するリポジトリのイメージ -->
<div class="container">
    <header>Quarkus CI/CD Pipeline Configuration</header>
    <ul>
        <li>Checkout Stage</li>
        <li>Test Stage</li>
        <li>Build Stage</li>
        <li>Docker Package Stage</li>
    </ul>
</div>

このHTML構造のように、パイプラインは各ステップが層状に重なって構成されています。初心者のうちは、一度に全てをやろうとせず、まずはテストの自動化から始め、徐々にDockerビルド、ネイティブイメージ化とステップアップしていくのが成功の秘訣です。Quarkusは最新の技術が詰まっていますが、Jenkinsとの親和性も非常に高いため、ぜひ挑戦してみてください。

カテゴリの一覧へ
新着記事
New1
Quarkus
QuarkusとGraalVMの進化を徹底解説!Javaネイティブイメージが切り拓く次世代開発の将来展望
New2
Micronaut
Micronaut + IntelliJ のプラグイン活用術!自動補完・テンプレート便利機能紹介
New3
Quarkus
QuarkusとGitHub Codespacesでクラウド開発を始める方法を完全解説!初心者でも迷わない開発環境構築ガイド
New4
Java
Java LocalTimeの使いどころ|時刻だけを扱う設計パターンを完全マスター
人気記事
No.1
Java&Spring記事人気No1
Quarkus
Quarkus拡張開発を徹底解説!仕組みから自作エクステンションの作り方まで
No.2
Java&Spring記事人気No2
Java
Javaの配列とは?基本の使い方・宣言・初期化を初心者向けにわかりやすく解説
No.3
Java&Spring記事人気No3
Java
Java ArrayListの使い方完全ガイド|追加・削除・取得・検索の基本操作
No.4
Java&Spring記事人気No4
Java
Javaの型変換(キャスト)を徹底解説!暗黙的・明示的変換の違いを整理
No.5
Java&Spring記事人気No5
Micronaut
MicronautのHTTPサーバー性能を最大化!初心者でもできるパフォーマンスチューニング
No.6
Java&Spring記事人気No6
Quarkus
Quarkus拡張開発をマスター!ビルドプロセスの仕組みと内部構造を徹底解説
No.7
Java&Spring記事人気No7
Java
Javaの配列検索を完全攻略!値の探し方や多次元配列の条件一致を解説
No.8
Java&Spring記事人気No8
Java
Javaのコンパイルと実行の流れを解説!JVM・JDK・JREの違いも初心者向けに整理