ビルドのパラメータ化とスクリプトの使用

JenkinsBeginner
オンラインで実践に進む

はじめに

最新の CI/CD パイプラインにおいて、柔軟性と自動化は鍵となります。ビルドジョブに値をハードコーディングすると、それらが硬直化し、管理が困難になります。Jenkins では、ビルドをパラメータ化し、ビルドプロセスの一部としてスクリプトを実行することで、これを克服できます。

この実験(Lab)では、柔軟な Jenkins ジョブを作成する方法を学びます。まず、ビルド時にユーザー入力を許可するためのパラメータを追加します。次に、ビルドステップとしてシェルスクリプトを実行する方法、そのスクリプトにパラメータを渡す方法、そしてビルドの成功または失敗に条件付きで応答するビルドアクション後の設定方法を学習します。これらは、Jenkins で堅牢かつ動的な自動化ワークフローを作成するための基本的なスキルです。

環境内ではすでに Jenkins インスタンスが実行されています。デスクトップ上の Firefox ブラウザを開くことで、Jenkins ウェブインターフェースにアクセスできます。ブラウザは自動的に http://localhost:8080 を開くため、URL を手動で入力する必要はありません。ログインも不要です。

フリースタイルプロジェクトの作成とパラメータ化

このステップでは、新しい Jenkins フリースタイルプロジェクトを作成し、パラメータを追加します。パラメータを設定することで、ジョブがインタラクティブになり、ビルドがトリガーされるたびにユーザーからの入力を受け付けることができるようになります。

まず、ジョブを作成しましょう。

  1. デスクトップインターフェースから Firefox ブラウザを開きます。ブラウザは自動的に http://localhost:8080 に開くため、URL を手動で入力する必要はありません。ログインは不要です。
  2. Jenkins ダッシュボードの左側のメニューにある New Item をクリックします。
  3. アイテム名として parameterized-script-job を入力します。
  4. Freestyle project を選択し、OK をクリックします。
Jenkins dashboard New Item button

ジョブの設定ページに移動します。次に、パラメータを追加しましょう。

  1. General セクションで、This project is parameterized のチェックボックスをオンにします。

    Jenkins job configuration page with parameters
  2. Add Parameter ドロップダウンをクリックし、String Parameter を選択します。

    • Name: GREETING_NAME
    • Default Value: World
    • Description: Enter a name to be greeted. (挨拶する名前を入力してください。)
  3. 再度 Add Parameter ドロップダウンをクリックし、Choice Parameter を選択します。

    • Name: ENVIRONMENT

    • Choices: (各選択肢を新しい行に入力します)

      DEV
      STAGING
      PROD
    • Description: Select the deployment environment. (デプロイ環境を選択してください。)

これらのパラメータは、後続のビルドステップで使用可能になります。

Jenkins job configuration page with parameters

最後に、一番下までスクロールし、Save をクリックします。ジョブのメインページにリダイレクトされ、そこでは「Build Now」の代わりに Build with Parameters オプションが表示されるようになります。

Build with Parameters

シェルスクリプトビルドステップの追加

このステップでは、ジョブのビルドプロセスにシェルスクリプトを追加します。これは、コードのコンパイル、テストの実行、アプリケーションのデプロイなどのタスクを実行するための一般的な方法です。

  1. Jenkinsでparameterized-script-jobダッシュボードに移動します。
  2. 左側のメニューからConfigureをクリックします。
  3. Build Stepsセクションまでスクロールダウンします。
  4. Add build stepドロップダウンをクリックし、Execute shellを選択します。
  5. Commandテキストエリアに、次のスクリプトを入力します。このスクリプトは、Jenkinsワークスペース内にプロジェクトのディレクトリ構造を作成し、その内容を一覧表示します。
echo "--- Starting Build Step ---"
echo "Current directory:"
pwd
echo "Creating project directory structure:"
mkdir -p my-app
echo "Version 1.0" > my-app/version.txt
echo "Listing files in the project directory:"
ls -la my-app
echo "--- Build Step Finished ---"
Jenkins job configuration page showing build steps
  1. Saveをクリックして変更を適用します。

それでは、ジョブを実行してスクリプトが動作していることを確認しましょう。

  1. ジョブページで、Build with Parametersをクリックします。
  2. パラメータのデフォルト値をそのままにして、Buildボタンをクリックします。
  3. 左側のBuild Historyに新しいビルドが表示されます。ビルド番号(例:#1)をクリックします。
  4. Console Outputをクリックしてログを表示します。

シェルスクリプトからの出力、ファイル一覧を含むものが表示されるはずです。

Started by user admin
Running as SYSTEM
Building in workspace /var/jenkins_home/workspace/parameterized-script-job
[parameterized-script-job] $ /bin/sh -xe /tmp/jenkins15539247300321029374.sh
+ echo --- Starting Build Step ---
--- Starting Build Step ---
+ echo Current directory:
Current directory:
+ pwd
/var/jenkins_home/workspace/parameterized-script-job
+ echo Creating project directory structure:
Creating project directory structure:
+ mkdir -p my-app
+ echo Version 1.0
+ echo Listing files in the project directory:
Listing files in the project directory:
+ ls -la my-app
total 12
drwxr-xr-x 2 jenkins jenkins 4096 Aug 22 01:56 .
drwxr-xr-x 3 jenkins jenkins 4096 Aug 22 01:56 ..
-rw-r--r-- 1 jenkins jenkins   12 Aug 22 01:56 version.txt
+ echo --- Build Step Finished ---
--- Build Step Finished ---
Finished: SUCCESS
Jenkins job console output

シェルスクリプトへのパラメータ渡し

このステップでは、ステップ 1 で定義したパラメータをシェルスクリプト内で使用する方法を学びます。Jenkins はビルドパラメータを環境変数として公開しており、スクリプト内で $VARIABLE_NAME の構文を使用してアクセスできます。

  1. parameterized-script-jobConfigure ページに戻ります。
  2. Build Steps セクションまでスクロールダウンし、Execute shell コマンドボックスを見つけます。
  3. 既存のスクリプトを以下のものに置き換えます。
echo "--- Starting Parameterized Build Step ---"
echo "Hello, $GREETING_NAME!"
echo "Deploying to the $ENVIRONMENT environment."

## Create project structure if not exists and read the version from the file
mkdir -p my-app
echo "Version 1.0" > my-app/version.txt
APP_VERSION=$(cat my-app/version.txt)
echo "Application version is: $APP_VERSION"
echo "--- Parameterized Build Step Finished ---"

echo コマンドで $GREETING_NAME$ENVIRONMENT が直接使用されていることに注意してください。ジョブが実行されると、Jenkins はこれらをユーザーが選択した値に置き換えます。

  1. Save をクリックします。

それでは、カスタムパラメータを使用してビルドを実行しましょう。

  1. Build with Parameters をクリックします。
  2. GREETING_NAMELabEx に変更します。
  3. ENVIRONMENT ドロップダウンから STAGING を選択します。
  4. Build をクリックします。
  5. 新しいビルドの Console Output を確認します。

出力は、提供したカスタム値を反映しているはずです。

Jenkins build console output showing parameterized script execution
--- Starting Parameterized Build Step ---
+ echo Hello, LabEx!
Hello, LabEx!
+ echo Deploying to the STAGING environment.
Deploying to the STAGING environment.
+ mkdir -p my-app
+ echo Version 1.0
+ cat my-app/version.txt
+ APP_VERSION=Version 1.0
+ echo Application version is: Version 1.0
Application version is: Version 1.0
+ echo --- Parameterized Build Step Finished ---
--- Parameterized Build Step Finished ---

条件付きステップによるビルド失敗の処理

このステップでは、ビルドの失敗をシミュレートし、ビルド失敗時のみクリーンアップまたは通知スクリプトを実行するためにビルド後アクション(Post-build Action)を使用します。これは、回復力のあるパイプラインを作成するために不可欠です。

Post-build Task プラグインのインストール

ビルド後タスクアクションを使用する前に、必要なプラグインをインストールする必要があります。

  1. Jenkins で、右上隅にある歯車アイコンをクリックして、Jenkins 管理パネルにアクセスし、次に Plugins をクリックします。
  2. Available plugins タブをクリックします。
  3. Check now をクリックしてプラグインリストを更新します。
  4. 検索ボックスで Post build task を検索します。
  5. プラグインの横にあるチェックボックスをオンにし、Install without restart をクリックします。
  6. インストールが完了するまで待ちます。
Jenkins available plugins page searching for Post build task

失敗をシミュレートするためのスクリプトの変更

次に、特定の条件で失敗するようにスクリプトを変更します。

  1. parameterized-script-jobConfigure ページに移動します。
  2. Execute shell コマンドボックスで、スクリプトを以下に置き換えます。
echo "Deploying to the $ENVIRONMENT environment."

if [ "$ENVIRONMENT" = "PROD" ]; then
  echo "Error: Production deployment is not allowed!"
  exit 1
fi

echo "Deployment to $ENVIRONMENT was successful."

このスクリプトは ENVIRONMENT パラメータをチェックします。PROD に設定されている場合、エラーメッセージを出力し、ステータスコード 1 で終了します。シェルスクリプトでは、ゼロ以外の終了コードは失敗を示すシグナルとなります。

それでは、失敗時にトリガーされるビルド後アクションを追加しましょう。

ビルド後アクションの追加

  1. Post-build Actions セクションまでスクロールダウンします。
  2. Add post-build action をクリックし、Post-build task を選択します。
  3. Log text フィールドに Error: と入力します。これにより、プラグインはビルドログ内のこの特定のテキストを検索するようになります。
  4. Script フィールドに次のコマンドを入力します。
echo "FAILURE DETECTED! Sending notification..."
Post-build task configuration with failure detection
  1. Save をクリックします。

失敗条件のテスト

それでは、失敗条件をテストしましょう。

  1. Build with Parameters をクリックします。
  2. ENVIRONMENTPROD を選択し、Build をクリックします。
  3. ビルドは失敗し、ビルド履歴のアイコンが赤色で示されます。
  4. Console Output を確認します。メインスクリプトからのエラーメッセージと、ビルド後タスクからのメッセージの両方が表示されます。
Console output showing build failure and post-build task
Deploying to the PROD environment.
+ [ PROD = PROD ]
+ echo Error: Production deployment is not allowed!
Error: Production deployment is not allowed!
+ exit 1
Build step 'Execute shell' marked build as failure
Performing Post build task...
Match found for :Error: : True
Logical operation result is TRUE
Running script  : echo "FAILURE DETECTED! Sending notification..."
[parameterized-script-job] $ /bin/sh -xe /tmp/jenkins14011006354379294736.sh
+ echo FAILURE DETECTED! Sending notification...
FAILURE DETECTED! Sending notification...
POST BUILD TASK : SUCCESS
END OF POST BUILD TASK : 0
Finished: FAILURE

DEV または STAGING でビルドを再度実行すると成功し、ビルド後タスクは実行されません。

まとめ

おめでとうございます。柔軟で堅牢な Jenkins ジョブを正常に作成しました。

この実験では、以下の方法を学びました。

  • String および Choice パラメータを使用して、パラメータ化された Jenkins ジョブを作成する。
  • ビルドプロセスの一部としてシェルスクリプトを実行する。
  • スクリプト内でビルドパラメータを環境変数としてアクセスし、使用する。
  • ビルド結果を制御するために、スクリプトに条件付きロジックを実装する。
  • ビルドログの内容に基づいてトリガーされる post-build アクションを構成し、ビルドの失敗を適切に処理できるようにする。

これらのスキルは、さまざまな入力に適応し、エラーをインテリジェントに処理できる高度な CI/CD パイプラインを構築するために不可欠です。これらの概念を、独自の開発およびデプロイワークフローの自動化に適用できるようになりました。