はじめに
Jenkins 共有ライブラリ(Shared Libraries)を使用すると、チームは複数のジョブ間でパイプラインコードを再利用できます。一般的なライブラリの構成では、シンプルなカスタムステップを vars/ ディレクトリに配置します。パイプラインはライブラリをロードすることで、それらのステップを通常のパイプライン関数のように呼び出すことができます。
この実験では、vars/sayHello.groovy を含むローカル共有ライブラリを準備し、Jenkins ダッシュボードから「グローバルパイプラインライブラリ」として登録します。その後、sayHello を呼び出すパイプラインジョブを作成し、Jenkins 上で出力結果を検証します。
共有ライブラリリポジトリの準備
このステップでは、Jenkins 共有ライブラリ用のローカル Git リポジトリを準備します。vars/ ディレクトリは特別な意味を持ち、その中の各 .groovy ファイルは、ファイル名と同じ名前のパイプラインステップとして機能します。
以下のコマンドを実行して、Jenkins コンテナ内に vars/sayHello.groovy を作成します。
docker exec jenkins bash -lc '
set -e
rm -rf /var/jenkins_home/shared-lib-src /var/jenkins_home/shared-lib.git
mkdir -p /var/jenkins_home/shared-lib-src/vars
cd /var/jenkins_home/shared-lib-src
git init -b main
git config user.email "jenkins@example.com"
git config user.name "Jenkins Shared Library"
cat > vars/sayHello.groovy <<'"'"'EOF'"'"'
def call(String name = "LabEx") {
echo "Shared library says hello to ${name}"
}
EOF
git add vars/sayHello.groovy
git commit -m "Add sayHello shared library step"
'
次に、リポジトリをローカルのベアリポジトリとして公開し、git://localhost/shared-lib.git を通じてアクセスできるようにします。
docker exec jenkins bash -lc '
set -e
cd /var/jenkins_home/shared-lib-src
git init --bare --initial-branch=main /var/jenkins_home/shared-lib.git
git remote add origin /var/jenkins_home/shared-lib.git
git push origin main
touch /var/jenkins_home/shared-lib.git/git-daemon-export-ok
if [ -f /tmp/shared-lib-git-daemon.pid ]; then
kill "$(cat /tmp/shared-lib-git-daemon.pid)" 2>/dev/null || true
rm -f /tmp/shared-lib-git-daemon.pid
fi
git daemon --reuseaddr --base-path=/var/jenkins_home --export-all --detach --pid-file=/tmp/shared-lib-git-daemon.pid /var/jenkins_home
'
Jenkins が使用するリポジトリのブランチを記録します。
docker exec jenkins git ls-remote git://localhost/shared-lib.git refs/heads/main | tee /home/labex/project/shared-library-repository.txt
出力に refs/heads/main が含まれていることを確認してください。
グローバルパイプラインライブラリの登録
このステップでは、リポジトリを labex-shared-lib という名前の Jenkins グローバルパイプラインライブラリとして登録します。パイプラインは @Library を使用してこの名前をロードできます。
デスクトップインターフェースを開きます。Firefox が自動的に Jenkins を開きます。開かない場合は http://localhost:8080 にアクセスしてください。
Jenkins ダッシュボードから:
Manage Jenkins(Jenkins の管理)をクリックし、System(システムの設定)をクリックします。
Global Trusted Pipeline Libraries または Global Pipeline Libraries までスクロールし、Add(追加)をクリックします。
以下の値を入力してライブラリを設定します。
Name:labex-shared-libDefault version:mainAllow default version to be overriddenにチェックを入れるLoad implicitlyはチェックを外したままにするRetrieval method:Modern SCMSource Code Management:GitProject Repository:git://localhost/shared-lib.gitCredentials:- none -
Save(保存)をクリックします。

以下のコマンドを実行して、保存されたライブラリ設定を記録します。
docker exec jenkins sh -lc "grep -n -E '<name>labex-shared-lib</name>|git://localhost/shared-lib.git|<defaultVersion>main</defaultVersion>' /var/jenkins_home/org.jenkinsci.plugins.workflow.libs.GlobalLibraries.xml" | tee /home/labex/project/shared-library-config-lines.txt
ライブラリをロードするパイプラインの作成
このステップでは、shared-library-demo という名前のパイプラインジョブを作成します。このパイプラインは labex-shared-lib をロードし、vars/sayHello.groovy 内のカスタムステップ sayHello('LabEx') を呼び出します。
Jenkins ダッシュボードから:
New Item(新規ジョブ作成)をクリックし、shared-library-demo と入力して Pipeline を選択し、OK をクリックします。
Pipeline セクションまでスクロールします。Definition は Pipeline script のままにします。
以下のスクリプトを入力します。
@Library('labex-shared-lib@main') _
node {
stage('Use Library') {
sayHello('LabEx')
}
}
Save(保存)をクリックします。

以下のコマンドを実行して、保存されたパイプラインスクリプトを記録します。
docker exec jenkins sh -lc "grep -n -E '@Library|sayHello' /var/jenkins_home/jobs/shared-library-demo/config.xml" | tee /home/labex/project/shared-library-job-config.txt
共有ライブラリパイプラインの実行
このステップでは、パイプラインジョブを実行します。Jenkins はローカルの Git リポジトリから共有ライブラリを取得し、vars/sayHello.groovy をロードしてカスタムステップを実行します。
shared-library-demo ジョブのページで、Build Now(ビルド実行)をクリックします。
ビルド履歴に #1 が表示されたら、完了するまで待ちます。ビルドが成功すれば、Jenkins がライブラリをロードし、パイプラインスクリプトを実行できたことを意味します。

以下のコマンドを実行して、ビルド結果を保存します。
curl -fsS http://localhost:8080/job/shared-library-demo/1/api/json | tr ',' '\n' | grep '"result":"SUCCESS"' | tee /home/labex/project/shared-library-build-result.txt
共有ライブラリの出力の確認
このステップでは、Jenkins のコンソール出力を確認します。重要な証拠は sayHello.groovy によって出力された行です。
ビルド #1 を開き、Console Output(コンソール出力)をクリックします。
コンソールには、Jenkins が labex-shared-lib をロードし、以下のように出力していることが表示されるはずです。
Shared library says hello to LabEx

以下のコマンドを実行して、同じコンソール出力を記録します。
curl -fsS http://localhost:8080/job/shared-library-demo/1/consoleText | grep 'Shared library says hello to LabEx' | tee /home/labex/project/shared-library-console-lines.txt
まとめ
Jenkins 共有ライブラリのリポジトリを準備し、ダッシュボードからグローバルパイプラインライブラリとして登録しました。さらに、そのライブラリをロードするパイプラインジョブを作成し、vars/ 内のカスタムステップが Jenkins のコンソール出力で正常に実行されることを確認しました。