Jenkins再入門|特徴やビルド、Pipeline、ビルド・トリガーをわかりやすく解説!

多くの企業のソフトウェア開発では、CI/CDツール(継続的インテグレーション/継続的デリバリー)によってビルドやテスト、デプロイまでを自動化することで、サービスのリリースまでの時間を短縮できます。Jenkinsは、現在も市場で最も人気があり、多くの企業で採用されているCI/CDツールです。本記事では、Jenkinsの特徴、ジョブやビルド、ビルド・トリガーについて紹介します。
Jenkinsとは?
Jenkinsの前身であるHudsonは、川口耕介氏によって開発されました。その後、Jenkinsという名前に変更されて現在では世界中の多くの企業などで使われています。
Jenkinsは、ソフトウェア開発のプロセスを効率化するために利用されているオープンソースソフトウェアのCI/CDツールです。
主にソフトウェア開発のビルド、テスト、デプロイまでの一連の作業を自動化します。例えば、GitHubなどに保存されているソースコードに変更があるたびに、その変更を自動的に検知してJenkinsで設定されたジョブによりビルドからテスト、最終的にはデプロイまでを行います。
Jenkinsの特徴
豊富なプラグインで機能を自在に拡張
プラグイン数は、2,000以上が提供されており、必要に応じて機能を拡張できます。プラグインのカテゴリは大きく、「プラットフォーム」「ユーザーインタフェース」「ビルド管理」「ソースコード管理」に分類されています。さらに、健康スコアを活用することで、プラグインの安全性を評価しているので安心して運用ができるでしょう。
オンプレミス・クラウドに対応した柔軟な環境構築
Jenkinsは、オンプレミス環境だけではなくクラウド環境にも対応しており柔軟な構築が可能です。幅広いプラットフォーム(Windows、macOS、Linuxなど)に対応しており、Jenkinsのインストールから設定までは容易に行えます。
豊富な学習リソース&活発なコミュニティ
公式ドキュメントや書籍、オンライン講座など、学習できる情報が充実している点は大きな魅力です。コミュニティフォーラムは、ユーザー同士で情報交換が活発に行われています。そのため、必要な情報をスムーズに見つけることができるでしょう。
Jenkinsのジョブとは?
Jenkinsのジョブとは、実行する処理の集まりです。ビルドなどの処理をジョブに定義し、あるタイミングで実行できるよう設定します。ジョブを作成する方法には、「フリースタイル」と「Jenkins Pipeline」の2種類があります。
「フリースタイル」は、GUI画面にてジョブの作成や設定を行う方法です。
一方、「Jenkins Pipeline」は、コードでジョブを定義する方法で宣言型(Declarative Pipeline)とスクリプト型(Scripted Pipeline)に分かれています。コードで記述することにより、コードの再利用や変更履歴の管理が容易です。
### 宣言型
pipeline {
agent any
stages {
stage(‘Hello’) {
steps {
echo ‘Hello World’
}
}
}
}
### スクリプト型
node {
stage(‘Hello’) {
echo ‘Hello World’
}
}
Jenkinsのビルドとは?
ビルドとは、ソースコードに対してコンパイルなどの処理を行い、ソフトウェアを生成する一連のプロセスのことを指します。Java開発では、MavenやGradleといったビルドツールを使い、ビルドのプロセスを実行するのが一般的です。
多くの企業では、ソースコードをソースリポジトリ(GitやGitHubなど)に保存し、Jenkinsのジョブを使用してソースコードのビルドを行います。ビルドされた成果物は、Jenkinsのワークスペースに保存されます。
Jenkinsでビルドを実行する流れ
Jenkinsで「simple-java-maven-app」をビルドする流れを紹介します。まずは、事前に以下を準備しておきましょう。
(1)「simple-java-maven-app」を自身のリポジトリに保存する。
<simple-java-maven-appのリポジトリ>
https://github.com/jenkins-docs/simple-java-maven-app
(2)Jenkinsにビルドツールの「Maven」をインストールする。
<Mavenの公式サイト>
https://maven.apache.org/index.html
(3)Jenkinsに以下のプラグインをインストールする。
・JUnit Plugin
・Pipeline
・Pipeline: Stage View
フリースタイルでビルドする方法
(1)[新規ジョブ作成] – [フリースタイル・プロジェクトのビルド]を選択し、ジョブ名を入力して[OK]ボタンを押下する。
(2)ソースコード管理で「Git」を選択し、以下の項目を記入する。
リポジトリURL:「simple-java-maven-app」を保存しているリポジトリのURL
認証情報:「simple-java-maven-app」を保存している認証情報
ブランチ指定子:ブランチ名
(3)Build Stepsの[ビルド手順の追加]を選択し、[Mavenの呼び出し]を選択します。
(4)「Mavenの呼び出し」画面にある以下の項目を記入する。
使用するMaven:インストールしたMavenを選択する
ゴール:clean package
(5)ビルド後の処理にある[ビルド後の処理の追加]ボタンを押下して、[成果物を保存]を選択する。ここでは、ビルドした成果物をジョブ画面に表示させることができます。
(6)ビルド後の処理にある[ビルド後の処理の追加]ボタンを押下して、[JUnitテスト結果の集計]を選択する。「JUnitテスト結果の集計」にある以下の項目を記入する。
テスト結果XML:target/surefire-reports/*.xml
(7)すべて設定したら[適用]ボタンを押下し、その後に[Save]ボタンを押下する。
(8)作成したジョブにて、[ビルド実行]する。その後、実行結果が下図のように表示される。
Jenkins Pipelineでビルドする方法
(1)[新規ジョブ作成] – [パイプライン]を選択し、ジョブ名を入力して[OK]ボタンを押下する。
(2)パイプラインの中にある、定義が「Pipenline script」であることを確認後に、Scriptのテキストボックスにコードを記入する。
<サンプルコード>
pipeline {
agent any
stages {
stage(‘チェックアウト’) {
steps {
// GitHub からソースコードを取得
git url: ‘https://github.com/xxx/jenkins.git’, branch: ‘main’
}
}
stage(‘ビルド’) {
steps {
// Maven を実行
sh “/opt/apache-maven-3.9.9/bin/mvn clean package”
}
}
stage(‘テスト結果の集計’) {
steps {
// JUnitテスト結果の集計
junit(‘target/surefire-reports/*.xml’)
}
}
stage(‘成果物を保存’) {
steps {
archiveArtifacts artifacts: ‘**/*.jar’, fingerprint: true
}
}
}
}
(3)すべて設定したら[適用]ボタンを押下し、その後に[Save]ボタンを押下する。
(4)作成したジョブにて、[ビルド実行]する。その後、実行結果が下図のように表示される。
※Stage Viewの画面になります
Jenkinsのビルド・トリガーとは?
ビルド・トリガーとは、実行するタイミングを設定でき、指定した条件に基づいてジョブが開始されます。以下の方法を紹介します。
・他プロジェクトの後にビルド
他のプロジェクトのビルド完了後に、続けてジョブを実行できます。
・定期的に実行
cron形式で実行時間を指定することで、その指定された時間にビルドが開始できます。
・SCMをポーリング
Jenkinsが定期的に、GITやGitHubなどのソースコード管理(SCM)で変更が加えられたかをポーリングし、変更があればビルドを実行します。
・リモートからビルド (例:スクリプトから)
Jenkinsにエンドポイントを設定し、外部からWebhookを使ってエンドポイントにリクエストを送信することで、ジョブを実行できます
・GitHub hook trigger for GITScm polling
GitHubでWebhook設定を行うことで、プッシュをトリガーにJenkinsのジョブが実行されます。この設定を行うには「GitHub」のプラグインをインストールする必要があります。
まとめ
Jenkinsは現在も広く利用されており、多くの企業で採用されているCI/CDツールです。豊富なプラグインによる高い拡張性、オンプレミス・クラウドのどちらにも対応できる柔軟性、そして活発なコミュニティによる安心のサポートが大きな強みです。
本記事では、Jenkinsの特徴、ジョブやビルドの設定方法、ビルド・トリガーを活用した柔軟な自動化について解説しました。ぜひJenkinsを活用し、開発プロセスのさらなる効率化に役立ててください。