1. サンプルコード(Jenkinsfile )
pipeline {
agent any
options {
timestamps()
ansiColor('xterm')
disableConcurrentBuilds()
}
environment {
// ---- 共通設定 ----
DOCKERHUB_USER = 'exampleuser'
BUILD_HOST = '192.168.10.64'
REGISTRY = 'docker.io'
COMPOSE_PROJECT_NAME = 'sample-app'
DOCKER_CONFIG = "${WORKSPACE}/.docker"
COMPOSE_FILE_PATH = 'docker-compose.build.yml'
COMPOSE_BASE = "docker-compose -p ${COMPOSE_PROJECT_NAME} -f ${COMPOSE_FILE_PATH}"
}
stages {
stage('Prepare: docker-compose & known_hosts') {
steps {
sh '''#!/usr/bin/env bash
set -Eeuo pipefail
echo "[Prepare] 環境準備を開始..."
DEST="$HOME/.local/bin"
mkdir -p "$DEST" "$DOCKER_CONFIG" "$HOME/.ssh"
export PATH="$DEST:$PATH"
# known_hosts 登録(模擬処理)
echo "[Prepare] known_hosts 登録確認中..."
ssh-keyscan -H "$BUILD_HOST" >> "$HOME/.ssh/known_hosts" 2>/dev/null || true
echo "[Prepare] known_hosts 登録完了"
'''
}
}
stage('Sanity check: SSH & remote Docker') {
steps {
withCredentials([sshUserPrivateKey(
credentialsId: 'ssh_build_host',
keyFileVariable: 'SSH_KEY',
usernameVariable: 'SSH_USER'
)]) {
sh '''#!/usr/bin/env bash
set -Eeuo pipefail
echo "[Check] SSH接続確認: ${SSH_USER}@${BUILD_HOST}"
# 実際にはここで ssh コマンドを実行する
'''
}
}
}
stage('Docker Hub login (client side)') {
steps {
withCredentials([usernamePassword(
credentialsId: 'dockerhub_example',
usernameVariable: 'DUSER',
passwordVariable: 'DPASS'
)]) {
sh '''#!/usr/bin/env bash
set -Eeuo pipefail
echo "[Login] Docker Hub にログイン中..."
echo "ユーザ名: $DUSER"
# 実際にはここで docker login を実行する
'''
}
}
}
stage('Build on remote with compose') {
steps {
sh '''#!/usr/bin/env bash
set -Eeuo pipefail
echo "[Build] SSH経由でリモートビルドを実行(模擬)..."
# compose コマンド模擬
compose() { echo "docker-compose 実行: $*"; }
compose build
compose up -d
# DOCKER_HOST 設定模擬
export DOCKER_HOST="ssh://user@${BUILD_HOST}"
echo "[Build] DOCKER_HOST=$DOCKER_HOST"
'''
}
}
}
post {
success {
echo "✅ パイプラインが正常に完了しました。"
}
failure {
echo "❌ パイプラインが失敗しました。"
}
}
}
2. 構文の解説
2.1 pipeline { ... }
Jenkinsfile の最上位ブロックであり、宣言型パイプラインの基本構文。
この中にすべての設定(agent, environment, stages など)を定義する。
2.2 agent any
パイプラインの全ステージを任意のJenkinsエージェントで実行する指定である。
特定のDocker環境やノードに限定したい場合↓
agent { label 'docker' }
// または
agent { docker { image 'jenkins/jenkins:lts-jdk11' } }
2.3 options { ... }
パイプライン全体の挙動を制御するオプションを定義する。
| オプション | 説明 |
|---|---|
timestamps() |
各ログ行に時刻を付与し、後からトレースしやすくする |
ansiColor('xterm') |
Jenkinsログに色を付け、視認性を上げる |
disableConcurrentBuilds() |
同じジョブが同時に実行されるのを防ぐ(状態競合の防止) |
2.4 environment { ... }
共通の環境変数を定義する。
パイプライン全体で参照可能であり、sh ステップ内でも ${VAR_NAME} として利用できる。
例:
DOCKER_CONFIG = "${WORKSPACE}/.docker"
COMPOSE_BASE = "docker-compose -p ${COMPOSE_PROJECT_NAME} -f ${COMPOSE_FILE_PATH}"
補足:
WORKSPACEは Jenkins の組み込み環境変数であり、
ジョブごとに割り当てられた作業ディレクトリを指す。
2.5 stages { ... }
ビルド処理の全体を段階(ステージ)ごとに分けるブロック。
JenkinsのUIでは各ステージが可視化される。
2.6 各 stage の構文
(1) Prepare: docker-compose & known_hosts
docker-compose バイナリと SSH の known_hosts 設定を整える。
-
sh '''...''':シェルスクリプトを実行する構文。 -
set -Eeuo pipefail:Bashの厳格モード。エラーを即検出できる。 -
ssh-keyscan:対象ホストの公開鍵を known_hosts に登録し、SSH接続エラーを防ぐ。
(2) Sanity check: SSH & remote Docker
SSH鍵を使ってリモートDockerホストへの接続確認を行う。
withCredentials([sshUserPrivateKey(...)]) { ... }
Jenkinsの「資格情報ストア」に登録された秘密鍵を安全に環境変数として扱う構文。
(3) Docker Hub login (client side)
Docker Hubへのログイン(認証ファイル生成)。
withCredentials([usernamePassword(...)]) により、
ユーザ名とパスワードを一時的に環境変数 (DUSER, DPASS) として利用できる。
(4) Build on remote with compose
SSH経由でリモートのDocker Engine上でビルドと起動を実行する。
-
eval "$(ssh-agent -s)":SSHエージェントを起動。 -
export DOCKER_HOST="ssh://${SSH_USER}@${BUILD_HOST}":Dockerコマンドをリモート転送モードに変更。 -
compose()関数:共通コマンドを関数化し、再利用可能にしている(Groovy内でBash関数定義)。
2.7 withCredentials
Jenkinsの認証情報を安全に呼び出すための構文であり、
秘密鍵やパスワードをスクリプトに平文で残さず安全に使用できる。
withCredentials([
sshUserPrivateKey(credentialsId: 'ssh_build_host', keyFileVariable: 'SSH_KEY', usernameVariable: 'SSH_USER'),
usernamePassword(credentialsId: 'dockerhub_example', usernameVariable: 'DUSER', passwordVariable: 'DPASS')
]) { ... }
2.8 sh '''...'''
三重引用符 (''') によるシェルスクリプトブロックは、改行を含む複数行を安全に記述できる。
#!/usr/bin/env bash を先頭に書くことで、Bash構文が明確に動作する。
3. Jenkinsfile構文まとめ表
| 構文 | 意味 | このサンプルでの使用例 |
|---|---|---|
pipeline {} |
パイプライン全体 | 全体を包む最上位構文 |
agent any |
実行環境指定 | 任意ノードで実行 |
options {} |
ビルド設定 |
timestamps(), ansiColor()
|
environment {} |
環境変数設定 |
DOCKER_BUILDKIT, COMPOSE_BASE
|
stages {} |
各工程の集合 |
Prepare, Build, など |
stage('...') |
単一ステージ | 各作業工程 |
steps {} |
実際の処理 |
sh, withCredentials など |
withCredentials() |
認証情報の注入 | SSH鍵やDockerHubログインに使用 |
sh '''...''' |
シェル実行 | Bashスクリプトを直接記述 |
参考