2013-03-08 9 views
8

Python 2.7 и ДженкинсДождитесь сборки Jenkins завершения

Я пишу код в Python, который будет выполнять фиксирование и ждать/опрос для Jenkins работы будет завершена. Мне хотелось бы узнать, как я это достигаю.

  1. функция Python, чтобы создать эти сведения в Perforce-> Это можно легко сделать, как P4 имеет CLI
  2. код Python для обнаружения когда сборка получил запускается -> У меня есть список изменений и число рабочих мест. Как я могу опросить Jenkins API для журнала сборки, чтобы проверить, есть ли у него соответствующие списки изменений? Результатом этого шага является строящийся url, который выполняет задание
  3. Как дождаться завершения задания jenkins?

Было бы хорошо, если кто-то может помочь мне с отрывками из API Дженкинс Rest или из модуля питона Дженкинс

ответ

4

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

На самом деле, в вашем Jenkins добавьте /lastBuild/api/ к любому Job, и вы увидите много информации об API. У него даже есть API Python, но я не знаком с этим, поэтому не могу больше помочь

Однако, если вы использовали XML, вы можете добавить lastBuild/api/xml?depth=0 и внутри XML вы можете увидеть объект <changeSet> со списком ревизий/commit, которые вызвали сборку

+0

Это не сработает, если есть и другие сборки уже в очереди –

6

Если вам нужно знать, закончилось ли задание, числовое значение buildNumber и buildTimestamp недостаточно.

Это суть того, как я выясняю, завершена ли работа, у меня она в рубине, но не на python, поэтому, возможно, кто-то может обновить ее до реального кода.

lastBuild = get jenkins/job/myJob/lastBuild/buildNumber 
get jenkins/job/myJob/lastBuild/build?token=gogogo 

currentBuild = get jenkins/job/myJob/lastBuild/buildNumber 
while currentBuild == lastBuild 
    sleep 1 

thisBuild = get jenkins/job/myJob/lastBuild/buildNumber 
buildInfo = get jenkins/job/myJob/[thisBuild]/api/xml?depth=0 

while buildInfo["freeStyleBuild/building"] == true 
    buildInfo = get jenkins/job/myJob/[thisBuild]/api/xml?depth=0 
    sleep 1 

ie. Я обнаружил, что мне нужно: A) подождать, пока начнется сборка (новый номер сборки) и B) дождитесь завершения строительства (здание ошибочно).

0

Прошла одна и та же проблема, и это сработало для меня, используя python3 и python-jenkins.

while "".join([d['color'] for d in j.get_jobs() if d['name'] == "job_name"]) == 'blue_anime': 
     print('Job is Running') 
     time.sleep(1) 

print('Job Over!!') 

Рабочий Github Сценарий: Link

0

Этого фрагмент кода начинает строить работу и ждать, пока работа не будет сделана.

Легко начать работу, но нам нужна какая-то логика, чтобы знать, когда работа выполнена. Во-первых, мы должны ждать идентификатор задания, которые должны применяться и чем мы можем запросить работу для деталей:

from jenkinsapi import jenkins 

server = jenkins.Jenkins(jenkinsurl, username=username, password='******') 
job = server.get_job(j_name) 
prev_id = job.get_last_buildnumber() 
server.build_job(j_name) 
while True: 
    print('Waiting for build to start...') 
    if prev_id != job.get_last_buildnumber(): 
     break 
    time.sleep(3) 
print('Running...') 
last_build = job.get_last_build() 
while last_build.is_running(): 
    time.sleep(1) 
print(str(last_build.get_status())) 
+0

Пожалуйста, попробуйте описать, как работает ваше решение, что основная концепция, которую ваше решение использует для решения проблемы – Murmel

Смежные вопросы