Как я проверяю состояние сборки сборки Jenkins из командной строки?

От рабочей станции, которая уже выполняет X11, в котором Вы можете ssh с-X опцией включить передачу X11. Или набор опция ForwardX11 к да в Вашем ssh конфигурационном файле. Если Вы соединяетесь из окон, Вы, вероятно, хотите Xming и включить передачу X11 в Шпаклевке. (см. это),

С передачей X11, включенной его, позволит удаленным приложениям X11 соединяться с и использовать сервер X11 на Вашей рабочей станции.

Сервер должен будет позволить передачу X11. Посмотрите sshd_config и установите X11Forwarding на да.

Если бы все работало правильно затем, после того как Вы соединились, выполнение выполнения команды на удаленном $DISPLAY эха должно отобразить что-то вроде этого.

# echo $DISPLAY
localhost:10.0

Можно также протестировать путем выполнения простой как xclock или xeyes. Приложение должно быть отображено на Вашей рабочей станции.

40
задан 18 July 2018 в 14:23
10 ответов

Мне не удалось найти встроенный инструмент, поэтому я сделал его:

#!/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)
38
ответ дан 28 November 2019 в 19:44

Можно попробовать этим,

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
0
ответ дан 28 November 2019 в 19:44

К счастью, есть jenkins-cli , с помощью которого вы можете получить некоторую информацию от Дженкинса. К сожалению, вы не можете получить статус сборки с помощью CLI - это означает, что ваше решение с использованием JSON API не только правильно - это единственный программный способ сделать это.

Кроме того, хотя это выглядит как get-job может делать то, что вы хотите, на самом деле он не возвращает результат - он возвращает только конфигурацию задания.

2
ответ дан 28 November 2019 в 19:44

Check to see if a build is running or not

I tried the Python script in the answer to this question, but couldn't get it to work. I don't know Python, and didn't want to invest any time in debugging, but was able to read enough of the script to gain inspiration from it.

All I need to do is check to see if a build is running or not. To do that I used curl and grep, like this:

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

  • If a build is in progress, a grep for result\":null will return 0.
  • If a build is finished, a grep for result\":null will return 1.

Not especially elegant, but it works well enough for my needs.

For example, I have a Bash script that starts a build, then waits for it to finish:

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

Thanks for the inspiration, Catskul!

11
ответ дан 28 November 2019 в 19:44

Мой бывший коллега написал https: // github.

6
ответ дан 28 November 2019 в 19:44

Думаю, я нашел более простой способ. Если я правильно понял, вы хотите проверить результат сборки - другими словами, была ли она успешной или неудачной.

Команда Jenkins CLI "build" изменяет код выхода в зависимости от результата сборки, так как пока вы используете в конце опцию -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

Обратите внимание, что опция идет в конце; это не первый -s , который используется для определения URL-адреса экземпляра Jenkins.

А затем, чтобы получить результат, вы можете использовать $? :

echo $?

Если результат 0, значит, это успешно. Если указано значение, отличное от 0, это означает сбой.

Ссылка: я не могу найти общедоступный экземпляр Jenkins, который дает доступ к этой странице, но его можно найти в вашем локальном экземпляре Jenkins: http: / / / 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.
3
ответ дан 28 November 2019 в 19:44

Другое решение 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
ответ дан 28 November 2019 в 19:44

Вы можете использовать символический дескриптор lastBuild :

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

Элемент result в ответе содержит строку, описывающую результат построения.

2
ответ дан 28 November 2019 в 19:44

Можно использовать скрипт Groovy:

  1. Через jenkins-cli

    echo 'println(jenkins.model.Jenkins.instance' \.
    .getItem("").lastBuild.building)" \.
     | java -jar jenkins-cli.jar -s  groovy =
    

    , где = означает стандарт in. Вы можете аутентифицироваться с помощью --имя пользователя -пароль или с помощью -i .

  2. Через jenkins-cli по SSH

    echo -e 'println(jenkins.getItem("JOB-NAME").lastBuild.building)\nexit' \' \.
    | шш -п <ЕНКИНС-Ш-Порт> <ЕНКИНС-ХОСТ> грувиш
    
4
ответ дан 28 November 2019 в 19:44

Другой сценарий для 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!!"
2
ответ дан 28 November 2019 в 19:44

Теги

Похожие вопросы