はじめに
仕事で、以下のようなCI/CDのCDを行う、Jenkinsパイプラインを作成中です。
- GitLabにHelmチャートをコミットしておく。
- my-values.yamlがコミットされると、WebhookでJenkinsのパイプラインを起動する。
- Jenkinsパイプラインの処理:
- GitLabへ
git clone
し、Helmチャートをダウンロードする。 helm install -f my-values.yaml
を実行し、Helmチャートをインストールする。
- GitLabへ
Jenkinsパイプラインでパラメーターを受け付けるには、parameters{}
セクションを作ればよいことはわかっていました。
しかし、GitLabからWebhookでJenkinsパイプラインを呼び出す際に、どのようにしてパラメーターをJenkinsパイプラインに渡すのかが分かりませんでした。
今回は、このことを生成AIを使って解決していきます。
GitLabのWebhook設定で、Webhookのペイロードにパラメーターを追加する方法
プロンプト
GitLabのWebhook設定で、Webhookのペイロードにパラメーターを追加する方法を教えてください。私は、GitLabからWebhookでJenkinsのパイプラインを起動します。
回答
GitLabのWebhookのペイロードにカスタムパラメーターを追加する方法は、直接GitLabの設定だけでは提供されていませんが、Jenkinsのパイプライン内でカスタムパラメーターを処理する方法があります。以下にその手順を示します。
GitLabのWebhook設定:
- GitLabのプロジェクト設定に移動します。
- 「Settings」>「Webhooks」に移動し、新しいWebhookを追加します。
- Webhook URLを指定します(例:
http://your-jenkins-url/project/your-pipeline
)。JenkinsでWebhookを受け取る:
- Jenkins側でGitLabからのWebhookを受け取るジョブを設定します。
- Jenkinsのジョブ設定に移動し、「このビルドはパラメーター化されている」をチェックします。
- 必要なパラメーターを定義します(例:
string
,choice
,boolean
など)。GitLabのWebhookペイロードを解析:
カスタムパラメーターの処理:
- GitLabのコミットメッセージやその他のペイロードデータを使って、必要なカスタムパラメーターを処理します。
以下は、JenkinsのDeclarative Pipelineの例です。
pipeline { agent any parameters { string(name: 'CUSTOM_PARAM', defaultValue: '', description: 'Custom parameter from GitLab') } triggers { GenericTrigger( genericVariables: [ [key: 'CUSTOM_PARAM', value: '$.commits[0].message'] ], genericRequestVariables: [ [key: 'CUSTOM_PARAM', regexpFilter: '.*'] ], token: 'your-webhook-token', printContributedVariables: true, printPostContent: true ) } stages { stage('Build') { steps { script { echo "Custom Parameter: ${params.CUSTOM_PARAM}" } } } } }
この例では、GitLabのコミットメッセージをカスタムパラメーターとして取得し、それをビルドステージで使用しています。
注意点
Generic Webhook Trigger Plugin
をJenkinsにインストールする必要があります。- Webhookのトークンはセキュリティのために使用されますので、適切に設定してください。
これで、GitLabのWebhookを通じてカスタムパラメーターをJenkinsのパイプラインに渡すことができます。
Jenkinsで定義したパラメーターの値を、GitLabからWebhookに渡す方法
一つ目の回答で、Jenkinsパイプラインでパラメーターを受け付けるには、parameters{}
セクションを作ればよいことが確認できました。
しかし、GitLabからWebhookでJenkinsパイプラインを呼び出す際に、どのようにしてパラメーターをJenkinsパイプラインに渡すのかが分かりません。これを確認していきます。
プロンプト
Jenkinsで定義したパラメーター(例: string, choice, booleanなど)の値を、GitLabからWebhookに渡すには、どうしたら良いのですか?
回答
Jenkinsで定義したパラメーターの値をGitLabからWebhookに渡すには、GitLabのWebhook URLにクエリパラメータとして渡す方法があります。この方法で、GitLabからJenkinsパイプラインにカスタムパラメーターを渡すことができます。以下にその手順を説明します。
1. Jenkinsのパイプライン設定
まず、Jenkinsのパイプラインで必要なパラメーターを定義します。
pipeline { agent any parameters { string(name: 'CUSTOM_STRING', defaultValue: '', description: 'Custom string parameter') booleanParam(name: 'CUSTOM_BOOLEAN', defaultValue: false, description: 'Custom boolean parameter') choice(name: 'CUSTOM_CHOICE', choices: ['Option1', 'Option2', 'Option3'], description: 'Custom choice parameter') } stages { stage('Build') { steps { script { echo "Custom String: ${params.CUSTOM_STRING}" echo "Custom Boolean: ${params.CUSTOM_BOOLEAN}" echo "Custom Choice: ${params.CUSTOM_CHOICE}" } } } } }
2. GitLabのWebhook設定
GitLabのWebhook設定で、JenkinsパイプラインをトリガーするためのURLを構築します。このURLには、必要なパラメーターをクエリパラメータとして追加します。
Webhook URLの例:
http://your-jenkins-url/job/your-pipeline/buildWithParameters?token=your-token&CUSTOM_STRING=example&CUSTOM_BOOLEAN=true&CUSTOM_CHOICE=Option1
3. GitLabでWebhookを設定する手順
- GitLabプロジェクトの設定に移動します。
- 「Settings」>「Webhooks」に移動します。
- 「Add webhook」をクリックします。
- 上記のようにクエリパラメータを含むWebhook URLを指定します。
- トリガーするイベントを選択します(例:
Push events
)。- 「Add webhook」をクリックして設定を保存します。
4. GitLabのコミットメッセージやペイロードからパラメータを動的に設定
GitLabのWebhook URLを設定するときに、GitLabの変数を使用して動的にパラメーターを設定することもできます。
例:
http://your-jenkins-url/job/your-pipeline/buildWithParameters?token=your-token&CUSTOM_STRING=$CI_COMMIT_MESSAGE&CUSTOM_BOOLEAN=true&CUSTOM_CHOICE=Option1
この例では、
$CI_COMMIT_MESSAGE
はGitLabのコミットメッセージを参照しています。まとめ
- Jenkinsのパイプラインで必要なパラメーターを定義する。
- GitLabのWebhook URLにクエリパラメータとしてJenkinsパラメーターを追加する。
- GitLabのプロジェクト設定でWebhookを設定し、適切なイベントに基づいてJenkinsパイプラインをトリガーする。
これにより、GitLabからJenkinsのパイプラインにカスタムパラメーターを渡すことができます。
やってみた感想
- 「パラメーターの値をGitLabからWebhookに渡すには、GitLabのWebhook URLにクエリパラメータとして渡す方法があります。」
- これです!欲しかった回答が得られました。
- クエリパラメーター、すなわちこのような書き方ができるとは、目からうろこでした。(当たり前かもしれませんが)
http://your-jenkins-url/job/your-pipeline/buildWithParameters?token=your-token&CUSTOM_STRING=$CI_COMMIT_MESSAGE&CUSTOM_BOOLEAN=true&CUSTOM_CHOICE=Option1
- この方法が分かってしまえば、GitLabからJenkinsにパラメーターを渡し放題です。