コマンドラインからJenkinsビルドのビルドステータスを確認するにはどうすればよいですか?


40

ブラウザに切り替えずにJenkinsビルドステータスを確認するにはどうすればよいですか?

必要に応じて、JSON APIを使用してスクリプトを作成できますが、このようなものが既に組み込まれているのではないかと思っていました。


また、トレイにビルドステータスを表示するCatLightビルドモニターなどの専用ツールを使用することもできます。
アレックス

ここのすべての投稿は、「最後のビルド」を指しているようです。ジョブ/ビルド番号Xのステータスを確認するための同様のクエリはありますか?リアルタイムで、または事後に確認しているもの。
デビッド

回答:


38

組み込みのツールが見つからなかったため、作成しました。

#!/usr/bin/python
#
# author: ajs
# license: bsd
# copyright: re2


import json 
import sys
import urllib
import urllib2

jenkinsUrl = "https://jenkins.example.com/job/"


if len( sys.argv ) > 1 :
    jobName = sys.argv[1]
    jobNameURL = urllib.quote(jobName)
else :
    sys.exit(1)

try:
    jenkinsStream   = urllib2.urlopen( jenkinsUrl + jobNameURL + "/lastBuild/api/json" )
except urllib2.HTTPError, e:
    print "URL Error: " + str(e.code) 
    print "      (job name [" + jobName + "] probably wrong)"
    sys.exit(2)

try:
    buildStatusJson = json.load( jenkinsStream )
except:
    print "Failed to parse json"
    sys.exit(3)

if buildStatusJson.has_key( "result" ):      
    print "[" + jobName + "] build status: " + buildStatusJson["result"]
    if buildStatusJson["result"] != "SUCCESS" :
        exit(4)
else:
    sys.exit(5)

sys.exit(0)

スクリプトでJenkinsユーザーをどのように認証しますか?
アマンヴァーシュニー

11

ビルドが実行中かどうかを確認します

この質問への回答でPythonスクリプトを試しましたが、動作させることができませんでした。私はPythonを知らず、デバッグに時間を費やしたくありませんでしたが、それからインスピレーションを得るのに十分なスクリプトを読むことができました。

ビルドが実行中かどうかを確認するだけです。そのために、次のようにcurlとgrepを使用しました。

curl http://myjenkins/job/myjob/lastBuild/api/json | grep --color result\":null

  • ビルドが進行中の場合、grepはresult\":null0を返します。
  • ビルドが終了すると、grepはresult\":null1を返します。

特にエレガントではありませんが、私のニーズには十分に機能します。

たとえば、ビルドを開始し、終了するまで待機するBashスクリプトがあります。

JOB_URL=http://jenkins.local/job/stevehhhbuild
JOB_STATUS_URL=${JOB_URL}/lastBuild/api/json

GREP_RETURN_CODE=0

# Start the build
curl $JOB_URL/build?delay=0sec

# Poll every thirty seconds until the build is finished
while [ $GREP_RETURN_CODE -eq 0 ]
do
    sleep 30
    # Grep will return 0 while the build is running:
    curl --silent $JOB_STATUS_URL | grep result\":null > /dev/null
    GREP_RETURN_CODE=$?
done

echo Build finished

インスピレーションをありがとう、Catskul!


私は行って、動作している現在の実装を確認しましたが、パスワード要件のために答えに入れたバージョンとは少し異なります。なぜあなたにとってうまくいかなかったのか知っていますか?
Catskul

Pythonスクリプトは、ジョブが既に終了していればうまく機能しますが、ジョブが実行されている場合、Pythonスクリプトは失敗しますTypeError: cannot concatenate 'str' and 'NoneType' objects。Pythonを知らないので、シェルを使用するように切り替えて、インスピレーションを得るためにあなたの答えを+1しました。ありがとう!
スティーブHHH

追加できます|| その後、終了コード1の条件curl --silent $ JOB_STATUS_URL | grep result \ ":null> / dev / null || if [" $? "==" 1 "]; then GREP_RETURN_CODE = $?Jenkinsビルドで実行している場合、終了コード '1'を取得しませんそしてあなたはそれが失敗したくない。
Shachar Hamuzim Rajuan


4

別のPythonソリューション:

from jenkinsapi.jenkins import Jenkins

jenkins_url = 'http://<server url>/'
server = Jenkins(jenkins_url, username = 'myUser', password = myPass)

job_instance = server.get_job('the job name')
running = job_instance.is_queued_or_running()
if not running:
   latestBuild = job_instance.get_last_build()
   print latestBuild.get_status()

4

Groovyスクリプトを使用できます。

  1. ジェンキンス-CLI経由

    echo 'println(jenkins.model.Jenkins.instance'\
    '.getItem("<JOB-NAME>").lastBuild.building)' \
        | java -jar jenkins-cli.jar -s <JENKINS-URL> groovy =

    =は標準入力を意味します。--username <USER> --password <PASS>またはで認証でき-i <SSH-PRIVATE-KEY>ます。

  2. SSH経由のjenkins-cli経由

    echo -e 'println(jenkins.getItem("JOB-NAME").lastBuild.building)\nexit' \
    | ssh -p <JENKINS-SSH-PORT> <JENKINS-HOST> groovysh

3

もっと簡単な方法を見つけたと思う。私が正しく理解していれば、ビルドの結果、つまり成功か失敗か、つまり言い換えると、あなたはチェックしたいでしょう。

Jenkins CLIの「ビルド」コマンドは、最後に-sまたは-fオプションを使用する限り、ビルドの結果に応じて終了コードを変更します。

例えば、

java -jar jenkins-cli.jar -s <url of Jenkins instance> build <project> -s

または

java -jar jenkins-cli.jar -s <url of Jenkins instance> build <project> -f

オプションが最後にあることに注意してください。-sJenkinsインスタンスのURLを定義するために使用される最初のではありません。

そして、結果を得るには、次を使用できます$?

echo $?

結果が0の場合、成功でした。0以外の場合は、失敗でした。

参照:このページへのアクセスを提供するパブリックJenkinsインスタンスは見つかりませんが、ローカルのJenkinsインスタンスにあります:http://<url of Jenkins Instance>/cli/command/build。それはまた違いを説明-sしてを-f

-s  : Wait until the completion/abortion of the command. Interrupts are passed
      through to the build.

-f  : Follow the build progress. Like -s only interrupts are not passed
      through to the build.

2

シンボリック記述子を使用できますlastBuild

http://localhost/jenkins/job/<jobName>/lastBuild/api/xml

result応答の要素には、ビルドの結果を説明する文字列が含まれています。


2

幸いなことに、Jenkinsから情報を取得するために使用できるjenkins-cliがあります。残念ながら、CLIを使用してビルドのステータスを取得することはできません。つまり、JSON APIを使用するソリューションが正しいだけではないことを意味します。これが唯一のプログラムによる方法です。

また、get-jobあなたが望むことをするかもしれないように見えますが、実際には結果を返しません-ジョブの設定のみを返します。


2

CMDの別のスクリプト(Windows):

:loop
ping 127.0.0.1 -n 6  1>nul
curl --silent http://localhost:8080/job/JOB_NAME/lastBuild/api/xml | FINDSTR "SUCCESS FAILURE" >nul & IF ERRORLEVEL 1 (goto :loop)
echo "BUILD FINISH!!"

ありがとう。これは非常に役立つことが判明しました。
ビクターS

0

これで試すことができます、

JOB_URL=http://localhost:8080/view/TestTab/job/JobWait
JOB_STATUS_URL=${JOB_URL}/lastBuild/api/json

GREP_RETURN_CODE=0

# Start the build
curl --user "username:password" $JOB_URL/build?delay=0sec

# Poll every 10 second  until the build is finished
while [ $GREP_RETURN_CODE -eq 0 ]
do
    sleep 10
    # Grep will return 0 while the build is running:
    curl --user "username:password" --silent $JOB_STATUS_URL | grep result\":null > /dev/null || if [ "$?" == "1" ]; then
      exit 0
    fi

    GREP_RETURN_CODE=$?
done
echo Build finished
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.