インストール
Docker を使用した Jenkins 環境のセットアップ
中国国内のネットワーク制限を考慮し、必要な Docker イメージを事前に取得しておくことを推奨します。
# Docker-in-Docker イメージ(コンテナ内で Docker コマンドを実行可能)
docker pull docker:dind
# Jenkins 公式イメージ(JDK17 同梱)
docker pull jenkins/jenkins:2.452.3-jdk17
カスタム Jenkins イメージの作成
以下の機能を追加したカスタムイメージを作成します:
- Blue Ocean:モダンな UI でパイプラインの可視化・操作を簡素化
- Docker Workflow:Declarative Pipeline 内で Docker コンテナを操作可能
- Docker CLI:ビルドやプッシュなどの Docker 操作を直接実行
- その他:MySQL クライアント、vim、net-tools など CI/CD に便利なツール群
cat <<EOF > Dockerfile
FROM jenkins/jenkins:2.452.3-jdk17
USER root
# 必要なパッケージと Docker CLI のインストール
RUN apt-get update && apt-get install -y lsb-release
RUN curl -fsSLo /usr/share/keyrings/docker-archive-keyring.asc \
https://download.docker.com/linux/debian/gpg
RUN echo "deb [arch=\$(dpkg --print-architecture) \
signed-by=/usr/share/keyrings/docker-archive-keyring.asc] \
https://download.docker.com/linux/debian \
\$(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list
RUN apt-get update && apt-get install -y docker-ce-cli
RUN apt-get update && apt-get install -y default-mysql-client less vim telnet net-tools
ENV LESSCHARSET=utf-8
USER jenkins
# Jenkins プラグインのインストール
RUN jenkins-plugin-cli --plugins "blueocean docker-workflow"
EOF
docker build -t myjenkins-blueocean:2.452.3-1 .
起動方法
まず、Jenkins のデータディレクトリの所有者を UID 1000(jenkins ユーザー)に変更します。
chown -R 1000:1000 ./volumes/jenkins-data
Docker Compose を使用した起動
cat <<EOF > docker-compose.yaml
services:
jenkins-docker:
image: docker:dind
privileged: true
environment:
- DOCKER_TLS_CERTDIR=/certs
volumes:
- ./volumes/jenkins-docker-certs:/certs/client
- ./volumes/jenkins-data:/var/jenkins_home
networks:
jenkins:
aliases:
- docker
ports:
- "2376:2376"
command: ["--storage-driver", "overlay2"]
jenkins-blueocean:
image: myjenkins-blueocean:2.452.3-1
restart: on-failure
environment:
- DOCKER_HOST=tcp://docker:2376
- DOCKER_CERT_PATH=/certs/client
- DOCKER_TLS_VERIFY=1
volumes:
- ./volumes/jenkins-data:/var/jenkins_home
- ./volumes/jenkins-docker-certs:/certs/client:ro
networks:
- jenkins
ports:
- "8080:8080"
- "50000:50000"
networks:
jenkins:
driver: bridge
EOF
docker compose up -d
初期設定
ブラウザで http://localhost:8080 にアクセスし、初期管理者パスワードを確認します。
docker compose exec jenkins-blueocean cat /var/jenkins_home/secrets/initialAdminPassword
パイプラインの実装例
Credentials の利用
Jenkins の Credentials Store は以下のような種類をサポートしています:
Username with passwordSSH Username with private keySecret text
パイプライン内で Credentials を環境変数として安全に使用するには、credentials() 関数または withCredentials ステップを使用します。
pipeline {
agent any
stages {
stage('Example') {
environment {
DB_CREDS = credentials('mysql-dev')
}
steps {
sh 'echo "User: $DB_CREDS_USR"'
}
}
}
}
SQL スクリプトの実行(ローカル MySQL クライアント利用)
pipeline {
agent any
parameters {
string(name: 'branch', defaultValue: 'main', description: '対象ブランチ')
}
environment {
GIT_CRED_ID = 'github-ssh-key'
MYSQL_CRED_ID = 'mysql-test'
}
stages {
stage('Checkout') {
steps {
checkout scmGit(
branches: [[name: "*/${params.branch}"]],
extensions: [localBranch("${params.branch}")],
userRemoteConfigs: [[
credentialsId: env.GIT_CRED_ID,
url: 'git@github.com:liuzhenghua/jenkins-test.git'
]]
)
}
}
stage('Execute SQL') {
steps {
script {
withCredentials([
usernamePassword(
credentialsId: env.MYSQL_CRED_ID,
usernameVariable: 'MYSQL_USER',
passwordVariable: 'MYSQL_PASS'
)
]) {
sh '''
set -e
for f in sql/*.sql; do
mysql -h 192.168.137.101 -u "$MYSQL_USER" -p"$MYSQL_PASS" demo_db < "$f"
done
'''
}
}
}
}
}
}
Docker コンテナ内での SQL 実行(MySQL クライアント未インストール時)
まず、MySQL クライアントを含むカスタムイメージを作成します。
cat <<EOF > Dockerfile.mysql
FROM alpine:3.20.1
RUN apk add --no-cache mysql-client
EOF
docker build -t registry.example.com/mysql-client:1.0 .
次に、パイプラインのエージェントを Docker に切り替えます。
pipeline {
agent {
docker {
image 'registry.example.com/mysql-client:1.0'
registryCredentialsId 'private-registry-creds'
}
}
// ... 以降のステージ定義
}
運用・トラブルシューティング
よく使うコマンド
# 初期パスワードの再確認
docker compose exec jenkins-blueocean cat /var/jenkins_home/secrets/initialAdminPassword
# root 権限でコンテナに入る
docker exec -u 0 -it jenkins-blueocean bash
プラグイン更新が失敗する場合
HTTPS 通信がプロキシや証明書の問題で失敗する場合、Jenkins 管理画面の「プラグイン管理」→「詳細設定」から Update Site URL を http:// に変更します。
Git SSH 鍵の設定手順
- 任意のマシンで SSH 鍵ペアを生成:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com" - 秘密鍵を Jenkins の Credentials に登録(種別: SSH Username with private key)
- 公開鍵を Git リポジトリ(例: GitHub)に登録
- Jenkins コンテナ内で一度手動で
ssh git@github.comを実行し、ホストを信頼済みに設定