私はJenkinsビルドサーバーと協力して、FPGAの合成/シミュレーションを実行しています。現在、ナイトリービルドがあり、Jenkinsブラウザーインターフェイスでビルドを手動で開始できます。
私の質問は:
ブラウザインターフェイスを使用せずにバッチスクリプトでジョブビルドを開始する可能性はありますか?
(Windows 7 64ビットでJenkinsを実行しています。)
Curlコマンドを使用した例を次に示します(パラメーターを持つジョブの場合):
curl -X POST -u YOUR_USER:YOUR_USER_PASSWORD http://YOUR_JENKINS_URL/job/YOUR_JOB/buildWithParameters?PARAM1=value1&PARAM2=value
そして、パラメーターなしのジョブ:
curl -X POST -u YOUR_USER:YOUR_USER_PASSWORD http://YOUR_JENKINS_URL/job/YOUR_JOB/build
ユーザー/パスワードを使用したくない場合は、JenkinsユーザーのAPIトークンを生成できます。
Curlコマンドでこのトークンを使用します。
curl -X POST http://YOUR_JENKINS_URL/job/YOUR_JOB/build?TOKEN=YOUR_API_TOKEN
ユーザー名/パスワードの代わりに構成されたトークンを使用してJenkinsジョブをトリガーできます。これにより、独自の資格情報を公開せずにトリガースクリプトを共有できます。
次に、そのURLを curl
コマンドで使用して、ビルドをトリガーします。例えば:
curl -I https://${JENKINS_URL}/job/tmp/job/dummy-test/build?token=MY_TOKEN
-I
パラメーターは、curl
に応答のヘッドを印刷するように指示します。これを使用して、結果の状況を判別できます。成功した場合、JenkinsはHTTP 201で応答します。
$ curl -I https://<JENKINS_URL>/job/tmp/job/dummy-test/build\?token\=MY_TOKEN
HTTP/1.1 201 Created
Cache-Control: public
Content-Length: 0
Date: Mon, 11 Apr 2016 12:47:26 GMT
Location: https://<JENKINS_URL>/queue/item/1707/
Pragma: public
Server: Apache-Coyote/1.1
X-Content-Type-Options: nosniff
Connection: keep-alive
Curlを使用してジョブをトリガーしようとすると、常に「認証されていない」エラーが発生しました。
後で、サーバーで匿名アクセスを完全に無効にしたことが原因であることがわかりました。解決策は、次のプラグインをインストールすることでした: https://wiki.jenkins-ci.org/display/JENKINS/Build+Token+Root+Plugin
新しいJenkins PipelineのBuild Triggersで、チェックボックスTrigger builds remote(e.g.、from scripts)を選択します。次に、ビルドをトリガーするときに必要になるトークンをJenkinsに渡します。
Not authorized
エラーリモートでビルドをトリガーする際の問題は、Jenkinsの権限を設定し、匿名ユーザーアクセスを無効にすると、Not authorized
スクリプトからビルドをトリガーしようとするとエラーが発生します(@keocraが指摘したとおり)。次の2つのオプションがあります。
ビルドをリモートでトリガーするには、実行します
curl JENKINS_URL/buildByToken/build?job=JobFoo&token=MyToken
どこ JENKINS_URL
はJenkinsインスタンスのURL、JobFoo
はジョブの名前、MyToken
はTrigger bulids remote。
もちろん、curl
;を使用する必要はありません。 wget
またはHTTP要求を作成できる他のプログラムを使用することもできます。