こんにちは!開発チームの裏側を支えるCI/CDの世界へようこそ。
新しいプロジェクトが始まると、「とりあえず動くものを作ろう」と勢いであらゆるツールやプラグインを導入しがちですよね。特に、歴史ある現場でよく使われる「Jenkins」は、その高い拡張性の裏で、「プラグイン地獄」と呼ばれる恐ろしい罠を秘めています。
気がつけば、誰が入れたかもわからないプラグインが何十個も乱立し、バージョンアップを試みれば依存関係のクモの巣に足を取られてビルドが全停止……。夜中にアラートが鳴り響き、疲弊したエンジニアがメンテナンスに追われる。そんな現場を、私は数え切れないほど見てきました。
でも、安心してください。
今回は、Jenkinsのメンテナンスコストを劇的に下げ、「夜も安心して眠れるCI/CD環境」を手に入れるための実践的な運用ルールを、基礎から優しく紐解いていきます。
これをマスターすれば、毎日の作業が劇的に楽になりますよ。さあ、一緒にプラグイン地獄から抜け出しましょう!
—
1. Jenkinsってそもそも何をするツールなの?
一言で言うと、Jenkinsは「あなたの代わりに、面倒で単調な作業を24時間文句言わずにやり続けてくれる、超優秀な自動化ロボット」です。
プログラムを書いた後に、こんな作業をしていませんか?
- テストを動かす
- バグがないかチェックする(静的解析)
- 本番サーバーにデプロイする
- チームメンバーに「ビルド成功したよ!」とSlackで通知する
これらを人間が手動でやると、ミスも起きるし、何より時間がもったいない。Jenkinsに「コードがプッシュされたら、この手順で自動で全部やっておいて!」と命令(パイプライン定義)しておけば、あなたがコーヒーを飲んでいる間にすべてを完璧に終わらせてくれます。
—
2. 最初の一歩:最小構成のインストールと基礎セットアップ
さて、Jenkinsの最大の教訓は「最初から色々入れないこと」です。
Dockerを使えば、汚れないクリーンな環境を一瞬で構築できます。以下のコマンドを叩いてみてください。
Dockerを使ってJenkinsのLTS(長期サポート)版を起動する
docker run -d \
–name jenkins-master \
-p 8080:8080 \
-p 50000:50000 \
-v jenkins_home:/var/jenkins_home \
jenkins/jenkins:lts-jdk11
💡 先輩からのアドバイス:プラグインの初期選択は「最小限」が鉄則
起動してブラウザ(`http://localhost:8080`)にアクセスすると、初期パスワードの入力を求められ、その後にプラグインのインストール画面になります。
ここで、画面の勢いに押されて「推奨プラグインのインストール(Install suggested plugins)」をポチッと押してはいけません!
これこそがプラグイン地獄への第一歩です。何が入るかわからない数十個のプラグインの中に、あなたのプロジェクトで一生使わないものも含まれます。
ここはグッとこらえて、「選択してインストール(Select plugins to install)」を選び、チェックをすべて外してください。マジで空っぽの状態からスタートするのが、長期運用で勝つための最大の秘訣です。
—
3. 精度高い「Hello World」動作確認:安全なパイプラインを書こう
プラグインを極限まで削ぎ落とした状態で、正しく動くか「Hello World」の動作確認をしましょう。Jenkinsの現代的な流儀である「Pipeline(コードとしての定義)」を使います。
ジョブの作成手順
1. Jenkinsのダッシュボードから「新規ジョブ作成」をクリック。
2. 適当な名前(例: `hello-world`)を入力し、「パイプライン (Pipeline)」を選択して保存。
3. 画面下部の「パイプライン」セクションで、以下のスクリプトを貼り付けます。
// Jenkinsfile(Pipelineスクリプト)の基本形
pipeline {
// どんな環境(エージェント)で実行するか。今回はどこでも動く ‘any’
agent any
stages {
// ステージ1:挨拶をする
stage(‘Hello’) {
steps {
echo ‘こんにちは!Jenkinsの基本セットアップが完了しました!’
}
}
// ステージ2:環境の確認(OSやJavaのバージョン)
stage(‘Environment Check’) {
steps {
// OSによってコマンドを切り替える安全な書き方
sh ‘echo “Running on Unix-like system”‘
}
}
}
// すべての処理が終わった後の後処理
post {
success {
echo ‘🎉 ビルドが大成功しました!お疲れ様です!’
}
failure {
echo ‘🔥 どこかで失敗しました。ログを確認してください。’
}
}
}
「ビルド実行(Build Now)」を押してみましょう。「Console Output」を開いて、きれいな緑色のログとともにメッセージが表示されたら成功です!おめでとうございます、これがあなたのクリーンなCI/CDの第一歩です。
—
4. 【本題】プラグイン地獄から身を守る「3つの運用ルール」
ここからが本番です。Jenkinsを数ヶ月、数年と運用していく中で、絶対に守るべき「3つの鉄則」を伝授します。これを守るだけで、メンテナンスコストは8割削減されます。
ルール①:プラグインの選定基準は「公式・保守頻度・代替手段の有無」
新しいプラグインを入れる前には、必ず以下の「3つのフィルター」を通してください。
1. 公式(CloudBeesやJenkinsCI組織)のものか?
- 個人開発者が趣味で作ったプラグインは、数年後にメンテンスが停止し、セキュリティ脆弱性の温床になります。
2. 直近1年以内にアップデートされているか?
- 放置されているプラグインは、Jenkins本体のバージョンアップ時に確実に爆弾になります。
3. シェルスクリプトで代用できないか?
- 「ファイルをコピーするだけ」「特定のエンドポイントを叩くだけ」の機能のためにプラグインを入れるのは厳禁です。`sh` ステップ(シェルスクリプト)で書けるなら、プラグインは使わないのが最善です。
ルール②:バージョン依存地獄を防ぐ「Infrastructure as Code (JCasC)」
プラグインのバージョンがバラバラになり、どれをアプデしていいかわからなくなる現象を防ぐには、「JCasC (Configuration as Code)」を導入しましょう。
設定をコード化(YAMLファイル)し、Dockerイメージに焼き込んで管理します。
jenkins.yaml の例(イメージ)
jenkins:
systemMessage: “このJenkinsはコードで完全に管理されています。”
numExecutors: 2
unclassified:
# グローバルな設定をコードで記述
location:
url: http://jenkins.example.com/
プラグインのバージョンもここで完全に固定する
plugins:
- git:4.11.3
- workflow-aggregator:2.6
- configuration-as-code:1.55
これによって、「私のローカル環境では動くのに、本番のJenkinsでは動かない」という不毛なトラブルがゼロになります。
ルール③:不要なビルド履歴の自動削除(ディスク肥大化を防ぐ)
放置されたJenkinsが突然クラッシュする原因の第1位は、「ビルド履歴と成果物(Artifacts)によるディスク容量の枯渇」です。全ビルドの成果物を永遠に保存している現場が多すぎます。
必ず、ジョブの設定またはJenkins全体のグローバル設定で、古いビルドの自動削除(Discard old builds)を設定しましょう。
Pipelineスクリプト内であれば、以下のように `options` でスマートに指定できます。
pipeline {
agent any
options {
// 過去10回分のビルド、または過去30日以内のものだけ保存する(古いものは自動消去)
buildDiscarder(logRotator(numToKeepStr: ’10’, daysToKeepStr: ’30’))
// タイムスタンプをコンソールログに常時付与する(デバッグに必須)
timestamps()
}
stages {
stage(‘Build’) {
steps {
echo ‘ビルド履歴の自動クリーンアップ設定が有効な安全なパイプラインです。’
}
}
}
}
これを全パイプラインの標準テンプレートにしておけば、ディスク容量の心配から完全に解放されます。
—
おわりに:メンテナンスフリーな自動化へ向けて
Jenkinsは、正しく付き合えばこれほど頼りになる相棒はありませんが、甘やかして何でもかんでもプラグインを入れていると、いつか牙を剥いて開発チームを苦しめます。
- 「プラグインは最小限に」
- 「設定はコード(JCasC / Jenkinsfile)で管理」
- 「古いデータは残さない」
この3つを意識するだけで、あなたのチームのCI/CD環境は見違えるほどクリーンになり、毎日の開発が劇的に楽になりますよ。
さあ、今すぐあなたのJenkinsのプラグイン一覧を開いて、使っていないゾンビプラグインを断捨離してみませんか?
快適な自動化ライフを応援しています!