27

トークンを使用して Jenkins でジョブをリモートでトリガーするスクリプトがあります。これが私のスクリプトです:

JENKINS_URL='http://jenkins.myserver.com/jenkins'
JOB_NAME='job/utilities/job/my_job'
JOB_TOKEN='my_token'

curl "${JENKINS_URL}/${JOB_NAME}/buildWithParameters?token=${JOB_TOKEN}"

実行すると、次の応答が返されます。

* Hostname was NOT found in DNS cache
*   Trying 10.5.187.225...
* Connected to jenkins.myserver.com (10.5.187.225) port 80 (#0)
> GET /jenkins/job/utilities/job/my_job/buildWithParameters?token=my_token HTTP/1.1
> User-Agent: curl/7.37.1
> Host: jenkins.myserver.com
> Accept: */*
> 
< HTTP/1.1 201 Created
* Server nginx/1.6.2 is not blacklisted
< Server: nginx/1.6.2
< Date: Tue, 03 Feb 2015 23:40:47 GMT
< Content-Length: 0
< Location: http://jenkins.myserver.com/jenkins/queue/item/91/
< Connection: keep-alive
< Cache-Control: private
< Expires: Wed, 31 Dec 1969 16:00:00 PST
< 
* Connection #0 to host jenkins.myserver.com left intact

ヘッダーにキューの URL が返されることに気付きました: http://jenkins.myserver.com/jenkins/queue/item/91。しかし、このリターン URL をどのように使用すればよいかわかりません。

1) 作成したばかりのジョブのステータスを確認する方法を知っている人はいますか?

2) 上記の応答ではジョブ # が返されないため、この API 呼び出しは実際には使用できません。

curl http://jenkins.myserver.com/jenkins/job/utilities/job/my_job/8/api/json

ステータスを確認します。では、上記の応答から場所の URL を取得した後、どこでジョブ名とジョブ番号を取得できますか?

ありがとう

4

6 に答える 6

5

残りのAPIのみで状態を取得するには、同様の問題がありました。
これが私の解決策でした (これは弱く、安定した解決策ではありません!):

#Ex. http://jenkins.com/job/test
JOB_URL="${JENKINS_URL}/job/${JOB_NAME}"

#here you can ask for next build job number
function getNextBuildNr(){
  curl --silent ${JOB_URL}/api/json | grep -Po '"nextBuildNumber":\K\d+'
}    

# this will request the Status of job
function getBuildState(){
  buildNr=$1
  curl --silent ${JOB_URL}/${buildNr}/api/json | grep -Po '"result":\s*"\K\w+'
}

#this will wait for your Job state, by polling Jenkins every second
function waitForJob() {
  buildNr=$1
  state=""

  while [ "${state}" == "" ]
  do
     sleep 1
     state=$(getBuildState ${buildNr})
     echo -n '.'
  done

  echo -e "\n"
}

#now you can run and build
BUILD_NR=$(getNextBuildNr)

# input here your code/function to trigger the job

waitForJob ${BUILD_NR}
BUILD_STATE=$(getBuildState ${BUILD_NR})
echo "$BUILD_STATE"
于 2017-06-01T16:12:41.217 に答える
4

ジョブをトリガーすると、そのジョブはキューに入れられます。実際のビルドは、実行が開始されたときにのみ作成され、その時点でビルド番号が取得されます。すべてのエグゼキューターがビジー状態の場合、ビルドが作成されて実行が開始されるまでに長い時間がかかることがあります。

ジョブのトリガー時にビルド番号を取得する唯一の方法は、 Jenkins CLIの「build」コマンドを使用することです。-w オプションを使用すると、ビルドが開始されるまでコマンドは返されず、「Started build #N」と出力されます。

実際には java cli.jar は必要ありません。ssh クライアントだけで十分です。https://wiki.jenkins-ci.org/display/JENKINS/Jenkins+SSHを参照してください

それ以外に既知の解決策はありません。ビルドを検索して、ジョブをトリガーした頃にトリガーされたビルドを見つけることができるかもしれませんが、それは大変な作業です。

于 2015-02-04T19:25:36.983 に答える