Jenkins 共有ライブラリの使用

Beginner

はじめに

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-lib
  • Default version: main
  • Allow default version to be overridden にチェックを入れる
  • Load implicitly はチェックを外したままにする
  • Retrieval method: Modern SCM
  • Source Code Management: Git
  • Project Repository: git://localhost/shared-lib.git
  • Credentials: - none -

Save(保存)をクリックします。

Jenkins グローバルパイプラインライブラリの設定

以下のコマンドを実行して、保存されたライブラリ設定を記録します。

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 セクションまでスクロールします。DefinitionPipeline script のままにします。

以下のスクリプトを入力します。

@Library('labex-shared-lib@main') _

node {
    stage('Use Library') {
        sayHello('LabEx')
    }
}

Save(保存)をクリックします。

共有ライブラリを使用する Jenkins パイプライン

以下のコマンドを実行して、保存されたパイプラインスクリプトを記録します。

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 がライブラリをロードし、パイプラインスクリプトを実行できたことを意味します。

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

Jenkins 共有ライブラリのコンソール出力

以下のコマンドを実行して、同じコンソール出力を記録します。

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 のコンソール出力で正常に実行されることを確認しました。