【入門編】Jenkinsマスターへの道:Jenkinsfileを劇的に改善する再利用可能コードの書き方 – バージョン管理・CI/CD活用バイブル

こんにちは!エンジニアリングの世界へようこそ。
これからCI/CD自動化の心臓部である「Jenkins」を一緒にマスターしていきましょう。

開発現場で毎日行うビルドやテスト、デプロイ。これを自動化してくれるのがJenkinsですが、プロジェクトが増えるにつれて、同じようなJenkinsfile(パイプラインの設計図)があちこちにコピペされ、カオスになっていく……というのは、現場のエンジニアなら誰もが一度は通る「闇」です。

「またあの設定ファイルを書き換えるのか……全プロジェクト分直さなきゃいけないの?」

そんな絶望からあなたを救い出すのが、今回解説する「Shared Library(共通ライブラリ)」という最強の武器です。これをマスターすれば、パイプラインコードの重複を根絶し、メンテナンス効率を最大化できますよ。

それでは、Jenkinsの基礎から、明日から使えるスマートな共通ライブラリの設計術まで、一緒に見ていきましょう!

—

1. Jenkinsってなに?(ツールの役割と基本のキ)

一言で言うと、Jenkinsは「あなたの代わりに24時間365日、コードのビルド・テスト・デプロイを文句言わずに実行してくれる優秀なロボット執事」です。

私たちがGitHubなどにコードをプッシュした瞬間にそれを検知し、
1. ソースコードをコンパイルし
2. 自動テストを走らせ
3. 問題なければ本番サーバーへデプロイする

この一連の流れ(CI/CDパイプライン)を自動化するためのデファクトスタンダードツールがJenkinsです。

—

2. 最初の第一歩:最小限のセットアップとHelloWorld

難解な構築は置いておいて、まずは動く体験をしましょう。
Dockerを使えば、一瞬であなたの手元にJenkins環境が立ち上がります。

DockerでJenkinsを起動する

ターミナルを開いて、以下のコマンドを実行してみてください。

docker run -d \
–name jenkins-master \
-p 8080:8080 -p 50000:50000 \
-v jenkins_home:/var/jenkins_home \
jenkins/jenkins:lts

これだけで、お使いのPCの `http://localhost:8080` でJenkinsが動き出します。
初回アクセス時にパスワードを求められますが、以下のコマンドでコンテナ内からサクッと取得できます。

docker exec jenkins-master cat /var/jenkins_home/secrets/initialAdminPassword

画面に従ってプラグインのインストール(「suggested plugins」でOKです)を終えたら、いよいよ世界で一番シンプルな「Hello World」パイプラインを作ってみましょう。

精度高いHelloWorld(Jenkinsfile)

Jenkinsの管理画面から「新規ジョブ作成」>「パイプライン」を選び、以下のスクリプトを「Pipeline script」欄に貼り付けて実行(Build Now)してみてください。

// Jenkinsfile (Declarative Pipelineの基本)
pipeline {
// どのエージェント(実行環境)で動かすか
agent any

stages {
// ステージ1: 挨拶をする
stage(‘Hello’) {
steps {
echo ‘こんにちは、Jenkinsの世界へようこそ!’
}
}

// ステージ2: 環境情報を覗き見する
stage(‘Environment Check’) {
steps {
echo “実行ビルド番号: ${env.BUILD_NUMBER}”
echo “ジョブ名: ${env.JOB_NAME}”
}
}
}

post {
// 成否にかかわらず最後に実行されるブロック
always {
echo ‘パイプラインの実行が完了しました。’
}
}
}

コンソール出力(Console Output)を開き、きれいにログが流れたらセットアップ完了です!おめでとうございます。

—

3. 現場の闇:コピペだらけのJenkinsfileから脱却せよ

さて、ここからが本題です。
例えば、会社のプロジェクトが10個に増えたとします。どのプロジェクトのJenkinsfileを見ても、こんなボイラープレート(お決まりのコード)が書いてありませんか?

  • Slackへの通知処理(成功時、失敗時)
  • セキュリティスキャンの決まりきったコマンド
  • デプロイ前の承認(Input)プロセス

もしSlackのWebhook URLが変わったら? 10個すべてのJenkinsfileを書き換えますか? ……そんなのエンジニアの仕事じゃありませんよね。

ここで登場するのが Shared Library(共通ライブラリ) です。
共通の処理を1つのGitリポジトリにまとめ、みんなで「共有」しちゃいましょう。

—

4. Shared Libraryの設計と実装:実践ハンズオン

Shared Libraryのディレクトリ構造は、Jenkinsによって厳格に決められています。以下のようにリポジトリを作成します。

my-shared-library/
├── src/ # Javaでいう com.example.Utils などのクラスを置く場所(高度な人用)
└── vars/ # グローバル変数として簡単に呼び出せるスクリプトを置く場所(超重要!)
├── slackNotify.groovy
└── standardBuild.groovy

今回は、一番よく使う「Slack通知」と「ビルドの定型処理」をカプセル化してみましょう。

① Slack通知スクリプトを作る (`vars/slackNotify.groovy`)

`vars/` の下にファイルを作ると、ファイル名(拡張子除く)がそのままJenkinsfileから呼び出す関数名になります!

// vars/slackNotify.groovy
// 呼び出し方: slackNotify(‘#channel-name’, ‘SUCCESS’, ‘ビルド成功しました!’)

def call(String channel, String status, String message) {
// 色の判定
def color = (status == ‘SUCCESS’) ? ‘good’ : ‘danger’

// 実際のSlack通知プラグインのラッパー関数を呼ぶ想定
slackSend(
channel: channel,
color: color,
message: “””
[${status}] ジョブ: ${env.JOB_NAME} (Build #${env.BUILD_NUMBER})
> ${message}
<${env.BUILD_URL}|ビルド結果を確認する>
“””
)
}

② 定型化されたパイプラインを作る (`vars/standardBuild.groovy`)

次に、アプリのビルドからテスト、通知までを丸ごと包み込んだ「黄金のテンプレート」を作ります。

// vars/standardBuild.groovy
// 呼び出し方: standardBuild { sh ‘mvn clean package’ }

def call(Closure body) {
pipeline {
agent any

stages {
stage(‘Checkout’) {
steps {
// ソースコードのチェックアウト
checkout scm
}
}

stage(‘Build & Test’) {
steps {
// 引数として渡されたクロージャ(具体的なビルド処理)を実行
script {
body.call()
}
}
}
}

post {
success {
slackNotify(‘#ci-notifications’, ‘SUCCESS’, ‘すべてのテストをクリアしました!’)
}
failure {
slackNotify(‘#ci-notifications’, ‘FAILURE’, ‘ビルドが爆発しました。確認してください!’)
}
}
}
}

—

5. Jenkinsへの組み込みと、劇的に美しくなったJenkinsfile

作ったShared LibraryリポジトリをGitHub等にプッシュしたら、Jenkinsに登録しましょう。

1. Jenkinsの管理画面 >「システムの設定(System)」を開く。
2. 「Global Pipeline Libraries」のセクションを探し、「追加」をクリック。
3. 以下の様に設定します:

  • Name: `my-shared-lib` (Jenkinsfileから呼び出す名前)
  • Default version: `main` (ブランチ名)
  • Retrieval method: Modern SCM を選び、あなたのライブラリのGit URLを入力。

さあ、準備は整いました。各プロジェクトのJenkinsfileをどう書くか、見てください。

魔法のようにスッキリしたJenkinsfile

// 各プロジェクトのJenkinsfile(これだけでOK!)

// ライブラリをインポート
@Library(‘my-shared-lib’) _

// 共通ライブラリで定義したテンプレートを呼び出し、
// このプロジェクト固有のビルドコマンドだけを渡す!
standardBuild {
sh ‘npm install && npm test’
}

すごくないですか!?
たったこれだけの記述で、裏では「チェックアウト ➔ ビルド実行 ➔ 成功/失敗に応じたSlack通知」が完璧に実行されます。もしSlackの通知フォーマットを変えたくなったら、Shared Library側のファイルを1箇所修正するだけで、全プロジェクトが一瞬でアップデートされます。

—

まとめ:毎日の作業が劇的に楽になりますよ

今回はJenkinsの基本から、一歩進んだShared Libraryによるコードの共通化・再利用までを解説しました。

  • JenkinsはCI/CDの自動化に欠かせない優秀な执事。
  • パイプラインのコピペ地獄は、Shared Library(共通ライブラリ)でスマートに解決できる。
  • `vars/` ディレクトリに置いたスクリプトは、グローバル関数として簡単に呼び出せる。

これをマスターすれば、新しいプロジェクトが立ち上がったときも、数行のJenkinsfileを書くだけで最高品質のCI/CDパイプラインを手に入れることができます。設定ファイルのメンテナンスに怯える日々とはもうお別れです。

あなたの自動化ライフが、より快適でエキサイティングなものになりますように。
それでは、良きDevOpsライフを!

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