Contents
1. 前提条件と共通設定
このセクションでは、Jenkins 本体をインストールする前に準備すべき環境要件と、Java 17 の導入・バージョン管理 方法を解説します。
1‑1. Java 17 が必要な理由
Jenkins の LTS バージョンは Java 17 以上が必須 とされています。古い JDK を使用するとプラグインのロードエラーやパフォーマンス低下が発生するため、必ず 17 系列をインストールしてください。
1‑2. Java 17 のインストール(Ubuntu/Debian 系)
|
1 2 3 4 5 |
sudo apt update sudo apt install -y openjdk-17-jdk # バージョン確認 java -version # 出力例: openjdk version "17.0.12" |
参考:OpenJDK の公式インストール手順は Ubuntu Documentation を参照。
1‑3. Java 17 のインストール(Windows)
- 「AdoptOpenJDK – Temurin 17 LTS」から Windows 用 MSI をダウンロード。
- インストーラの指示に従いインストールし、
java -versionコマンドで確認してください。
2. Jenkins 本体のインストール
2‑1. 公式パッケージリポジトリの追加(Ubuntu/Debian)
公式ドキュメントは随時更新されるため、最新手順は必ず以下リンクを参照してください。
- Jenkins Debian パッケージガイド: https://www.jenkins.io/doc/book/installing/linux/#debianubuntu
|
1 2 3 4 5 6 7 8 9 10 11 |
# 1) GPG 鍵を取得し keyring に保存(パスは公式ドキュメントと同一) curl -fsSL https://pkg.jenkins.io/debian-stable/jenkins.io.key \ | sudo gpg --dearmor -o /usr/share/keyrings/jenkins-keyring.gpg # 2) apt ソースリストに Jenkins リポジトリを登録 echo "deb [signed-by=/usr/share/keyrings/jenkins-keyring.gpg] https://pkg.jenkins.io/debian-stable binary/" \ | sudo tee /etc/apt/sources.list.d/jenkins.list > /dev/null # 3) パッケージインデックスを更新 sudo apt update |
2‑2. Jenkins のインストールと自動起動設定
|
1 2 3 |
sudo apt install -y jenkins sudo systemctl enable --now jenkins |
ポイント:
systemctl status jenkinsでサービスがactive (running)か確認してください。
2‑3. Docker コンテナ版のセットアップ
Docker Hub の公式イメージは常に最新の LTS と JDK 17 が組み込まれています。詳細は https://hub.docker.com/r/jenkins/jenkins を参照。
|
1 2 3 4 5 6 |
docker run -d --name jenkins \ -p 8080:8080 -p 50000:50000 \ -v jenkins_home:/var/jenkins_home \ -e JAVA_OPTS="-Djenkins.install.runSetupWizard=false" \ jenkins/jenkins:lts-jdk17 |
-v jenkins_home:/var/jenkins_homeが永続化ボリュームです。- 環境変数
JAVA_OPTSによりセットアップウィザードをスキップし、後述の 初期管理者パスワード 取得手順へ進めます。
3. 初期管理者パスワードの取得とセキュリティベストプラクティス
3‑1. パスワード取得方法(共通)
- apt インストール版:
bash
sudo cat /var/lib/jenkins/secrets/initialAdminPassword - Docker 版:
bash
docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
3‑2. パスワード管理のベストプラクティス
| 項目 | 推奨操作 |
|---|---|
| 保管 | 初回セットアップ完了後は、パスワードを安全なシークレット管理ツール(例: HashiCorp Vault, Azure Key Vault)に保存し、ファイルは削除する。 |
| ローテーション | Manage Jenkins → Configure Global Security から新しい管理者ユーザーを作成し、元の admin アカウントを無効化または削除する。 |
| 監査 | /var/lib/jenkins/secrets/initialAdminPassword のアクセス権限は root:jenkins (0600) に限定し、ログ監視で不審な読み取りがないか確認する。 |
参考:Jenkins のセキュリティガイドライン – https://www.jenkins.io/doc/book/security/
4. 必須プラグインのインストールと管理
4‑1. 推奨プラグイン一覧
| プラグイン | 主な機能 | インストール手順 |
|---|---|---|
| Pipeline | Declarative / Scripted Pipeline の DSL 提供 | 「管理」→「プラグインの管理」→「利用可能」タブで pipeline 系を検索 |
| Blue Ocean | パイプライン可視化 UI | 同上、blue ocean で検索 |
| Credentials Binding | シークレット情報の安全注入 | 同上、credentials-binding |
| GitHub Branch Source | マルチブランチ検出・PR ビルド | 同上、github branch source |
注意:プラグインは 「推奨更新」 ボタンで一括アップデートできますが、バージョン情報は常に公式リリースノート(https://plugins.jenkins.io/)を確認してください。
4‑2. プラグイン更新の安全な実施手順
- バックアップ:
jenkins_homeディレクトリ全体を保存。 - プラグインチェック:
Manage Jenkins → Plugin Manager → Updatesで利用可能な更新を確認。 - 段階的適用: まず安全性が高いプラグイン(例:
workflow-aggregator)から更新し、問題が無ければ残りを適用する。
5. GitHub / GitLab 認証情報の取得と設定
5‑1. Personal Access Token (PAT) の正しい呼称と作成手順
| プラットフォーム | 作成手順概要 | 必要なスコープ |
|---|---|---|
| GitHub | Settings → Developer settings → Personal access tokens → Generate new token (classic) | repo, workflow(プライベートリポジトリの場合は admin:repo_hook) |
| GitLab | User Settings → Access Tokens → Create a personal access token | api, read_repository(CI 用に write_repository が必要な場合も) |
公式ドキュメント:
- GitHub PAT: https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token
- GitLab PAT: https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html
5‑2. Jenkins に認証情報を登録する手順
- Credentials → System → Global credentials (unrestricted) を開く。
- 「Add Credentials」→
Kindに Secret text(GitHub)または Username with password(GitLab)を選択。 IDはわかりやすい名前例github-pat,gitlab-tokenとし、Scope を Global に設定。
5‑3. Webhook 設定とトークンローテーション
- Webhook URL(GitHub):
http://<Jenkinsホスト>:8080/github-webhook/ - Webhook URL(GitLab):
http://<Jenkinsホスト>:8080/project/<project-id>/gitlab/webhook
トークンは 90 日程度でローテーションし、Jenkins の認証情報も同時に更新することで漏洩リスクを低減します。
6. シングルブランチとマルチブランチ Pipeline の実装
6‑1. シングルブランチ Pipeline(概要)
シングルブランチは 固定されたブランチ(例: main)に対してだけビルドを走らせます。小規模プロジェクトや検証環境で有効です。
手順
- 「新規ジョブ作成」→ Pipeline を選択。
- Pipeline script に以下の Declarative Jenkinsfile を貼り付け、
SCMから取得する設定に切り替えることも可能です。
|
1 2 3 4 5 6 7 8 |
pipeline { agent any stages { stage('Checkout') { steps { checkout scm } } stage('Build') { steps { sh 'mvn -B clean package' } } } } |
6‑2. マルチブランチ Pipeline(概要)
マルチブランチはリポジトリ内の すべてのブランチと Pull Request を自動検出し、Jenkinsfile があれば個別ジョブを生成します。大規模な開発フローで推奨されます。
手順
- 「新規アイテム」→ Multibranch Pipeline を選択。
- Branch Sources で GitHub(または GitLab)を追加し、先ほど登録した
github-pat/gitlab-tokenを認証情報として設定。 - 「Scan Multibranch Pipeline Triggers」から「定期的にスキャン」や「Webhook による即時実行」を有効化。
| 項目 | シングルブランチ | マルチブランチ |
|---|---|---|
| 対象 | 固定ブランチ(例: main) |
すべてのブランチ・PR |
| 設定手間 | 低 | 中(SCM と認証情報設定が必要) |
| スケール性 | 限定的 | 高い |
7. Declarative Jenkinsfile のベストプラクティス
7‑1. 基本構文と推奨レイアウト
- pipeline → ルートブロック
- agent → 実行ノード(
anyまたは Docker) - stages → ビジネスフローを表すステージ集合
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
pipeline { agent any // 任意のエージェントで実行 environment { // 全体で共通利用する環境変数 MAVEN_OPTS = '-Xmx2g' REGISTRY_CRED = credentials('docker-registry') } options { // ジョブレベルの設定例 timeout(time: 30, unit: 'MINUTES') retry(2) timestamps() } stages { // 各ステージは後述で詳説 } post { // ビルド結果に応じた処理 always { cleanWs() } success { echo 'Success' } failure { mail to: 'dev@example.com', subject: "Failed #${env.BUILD_NUMBER}", body: 'Check console.' } } } |
7‑2. 実務向けサンプル(Docker エージェントでのフルパイプライン)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
pipeline { agent { docker { image 'maven:3.9-eclipse-temurin-17' args '-v /var/run/docker.sock:/var/run/docker.sock' // Docker-in-Docker 用 } } environment { REGISTRY = 'registry.example.com/myapp' IMAGE_TAG = "${env.BRANCH_NAME}-${env.BUILD_NUMBER}" DOCKER_CRED = credentials('docker-registry') } options { timeout(time: 45, unit: 'MINUTES') retry(1) timestamps() } stages { stage('Checkout') { steps { checkout scm } } stage('Build') { steps { sh 'mvn -B clean package' } } stage('Test') { steps { sh 'mvn test' junit '**/target/surefire-reports/*.xml' } } stage('Docker Build & Push') { when { branch pattern: "^(main|release-.*)$", comparator: "REGEXP" } steps { script { docker.build("${env.REGISTRY}:${IMAGE_TAG}") .push() } } } } post { always { cleanWs() } success { echo 'Pipeline succeeded!' } failure { mail to: 'dev-team@example.com', subject: "Build #${env.BUILD_NUMBER} failed", body: "Check Jenkins console for details." } } } |
主なベストプラクティス
| 項目 | 推奨設定 |
|---|---|
| 環境変数 | credentials() でシークレットを直接注入し、平文保存を回避 |
| タイムアウト | 長時間走るテストやデプロイは必ず timeout を設定 |
| クリーンアップ | post.always.cleanWs() によりワークスペース漏洩防止 |
| ログ可視化 | timestamps() で行ごとに時刻を付与し、トラブル時の解析を容易に |
8. Blue Ocean でのパイプライン可視化とデバッグ
8‑1. Blue Ocean の導入手順
- 「管理」→「プラグインの管理」画面で Blue Ocean を検索し、
Install without restart。 - インストール後は Jenkins のトップ右上に Blue Ocean アイコンが表示されます。
8‑2. 主な機能と操作方法
| 機能 | 操作概要 |
|---|---|
| パイプラインカード | 各ステージがカード形式で表示され、成功・失敗を一目で把握 |
| ステージ単位の再実行 | 失敗したカード上の Retry アイコンでそのステージだけをリトライ |
| リアルタイムログ | カードをクリックするとライブコンソール出力が表示 |
| PR ビュー | Pull Request 毎に独立したカードが生成され、レビューと CI が同時に確認可能 |
9. 高度な Jenkins 設定例
9‑1. 並列ステージの実装
|
1 2 3 4 5 6 7 8 9 10 |
stage('Parallel Tests') { parallel { stage('Unit Tests') { steps { sh 'npm run test:unit' } } stage('Integration Tests') { when { branch pattern: "^(release|main)$", comparator: "REGEXP" } steps { sh 'npm run test:e2e' } } } } |
9‑2. 条件分岐とデプロイ制御
|
1 2 3 4 5 6 7 8 |
stage('Deploy') { when { branch 'main' } // 本番ブランチのみデプロイ実行 steps { sh "docker login -u $REGISTRY_USER -p $REGISTRY_PASSWORD" sh "docker push ${env.REGISTRY}:${IMAGE_TAG}" } } |
9‑3. 外部シークレットストア(Vault)との連携例
|
1 2 3 4 5 6 7 8 9 |
withCredentials([string(credentialsId: 'vault-token', variable: 'VAULT_TOKEN')]) { sh ''' export VAULT_ADDR=https://vault.example.com secret=$(curl -H "X-Vault-Token: $VAULT_TOKEN" \ https://vault.example.com/v1/secret/data/db | jq -r .data.password) echo "$secret" > db_password.txt ''' } |
10. 参考リンク集
| 内容 | URL |
|---|---|
| Jenkins インストール(Linux) | https://www.jenkins.io/doc/book/installing/ |
| Docker イメージ公式ページ | https://hub.docker.com/r/jenkins/jenkins |
| プラグインカタログ | https://plugins.jenkins.io/ |
| GitHub Personal Access Token (PAT) 作成手順 | https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token |
| GitLab Access Tokens | https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html |
| Blue Ocean ドキュメント | https://www.jenkins.io/doc/book/blueocean/ |
| Jenkins Security Best Practices | https://www.jenkins.io/doc/book/security/ |
まとめ
- Java 17 は一度だけ明示し、以降は前提条件として扱うことで冗長記述を排除しました。
- パッケージリポジトリ追加や PAT 作成は公式ドキュメントへのリンクと正確な手順で示し、誤解の余地をなくしています。
- 初期管理者パスワードは取得方法に加え 保管・ローテーション のベストプラクティスを提供しました。
- 必須プラグイン、認証情報、Blue Ocean など主要機能は実務で即活用できる具体例とともに解説しています。
本ガイドに沿って構築すれば、2026 年時点でも 安全・拡張性の高い Jenkins 環境を短時間で立ち上げられます。ぜひご活用ください。