web-dev-qa-db-ja.com

Jenkinsマルチブランチパイプラインプロジェクトのビルドをリモートでトリガーする方法

タイトルは主にそれを言います。リモートGitリポジトリからJenkinsマルチブランチパイプラインプロジェクトのビルドをトリガーするにはどうすればよいですか?

設定したトークンは保存されないため、「トリガーはリモートでビルドする」ビルドトリガーオプションは機能していないようです。

17
Marmoy

現時点(Jenkins 2.22)では、「Trigger builds remote」ビルドトリガーオプションがマルチブランチパイプラインジョブ構成に表示されますが、機能しません(チェックしてトークンを指定すると、保存後にリセットされます)。 this によると、トリガーを設定することはできませんが、オプションとして表示されるバグです。

同じスレッドで、マルチブランチパイプラインプロジェクトの個々のプロジェクト(ブランチ)のビルドをトリガーする方法を説明します。私が必要としたのは、スレッドからの推奨エンドポイントではなく、トリガーのセットアップ後に作成されたブランチに対して機能する動的セットアップでした(/job/project-name/job-name/build、これは/job/job-name/project-name/build、プロジェクトはジョブ内のブランチから作成されるため、使用するエンドポイントは/job/job-name/build。それが機能するためには、APIトークンを持つユーザーを作成する必要があり(Jenkinsの管理->ユーザーの管理->歯車アイコン-> APIトークンの表示)、リクエストでユーザー名とパスワードとして使用する必要があります。

解決策は、Jenkins REST APIでの作業に慣れている人にとっては明らかかもしれませんが、マルチブランチパイプラインプロジェクトとREST APIの両方に慣れていない場合、明示的であることを傷つけないでください。

16
Marmoy

Adminとしてログインしても「ユーザーの管理」というリンクが存在しないため、承認済みの回答に記載されているAPIトークンを取得できませんでした。代わりに、 Jenkins Wiki で説明されているトークンを取得しました。

APIトークンは、個人設定ページで利用できます。すべてのページの右上隅にある名前をクリックし、[構成]をクリックしてAPIトークンを表示します

トークンを取得すると、次のcurlリクエストにより、マルチブランチパイプラインの新しいビルドがトリガーされます($で始まるプレースホルダーを置き換えます)

curl -X POST -u "$jenkins_username:$api_token" "http://$jenkins_url/job/$my-pipeline/job/$branch_name/build?token=BUILD_TOKEN"

  1. パイプライン名またはブランチ名に特殊文字が含まれている場合、エンコードする必要があります。たとえば、/%252Fになります。
  2. tokenクエリパラメータはオプションです。
  3. この回答はJenkins v2.6で検証されています。
5
Abhijit Sarkar

クロスサイトリクエストフォージェリ(CSRF)保護を無効にしない場合、使用できるコマンドは次のとおりです。

crumb=$(curl -s 'http://USERNAME:API_TOKEN@JENKINS_URL/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)')
curl -X POST -H "$crumb" "http://USERNAME:API_TOKEN@JENKINS_URL/job/JOB_NAME/build"

大文字を適切な値に置き換えます。

1

私は最近このハードルを乗り越えたので、メモを共有したいと思います。

私の構成(Jenkins 2.60.2)では、「構成の表示」しかできないため、リモートで(たとえば、スクリプトから)ビルドを有効にする方法はありません。これにより、エンドポイント(/ job/project-name/job/job-name/build)にHTTP GETを発行してパイプラインをトリガーできなくなりました。

ただし、HTTP POSTをエンドポイントに発行することでいつでもトリガーできることがわかりました。

リクエストに有効なパンくずを指定するか、「グローバルセキュリティの設定」の「クロスサイトリクエストフォージェリエクスプロイトの防止」オプションを無効にする必要があります。

よろしく、

0
Lam Ly