От Jenkins, как мне получить список текущих рабочих заданий в JSON?
Я могу узнать обо всем о моем сервере Jenkins через Remote API, но не о списке текущих выполняемых заданий.
Это,
http://my-jenkins/computer/api/json
или
http://my-jenkins/computer/(master)/api/json
Казалось бы, самые логичные варианты, но они ничего не говорят (кроме количества заданий) о том, какие задания фактически выполняются.
Ответы
Ответ 1
У меня есть представление, определяемое с помощью Просмотр плагина фильтров заданий, который фильтрует только текущие рабочие задания, тогда вы можете использовать /api/json
в представлении чтобы просмотреть только выполняемые задания. У меня также есть один для прерванных, нестабильных и т.д.
UPDATE
Выберите "Редактировать вид" → Фильтры заданий → Add Job Filter ▼ → Фильтр статусов сборки
Строить статусы: ☑ В настоящее время строит
Тип соответствия: Исключить непревзойденный -...
Ответ 2
В Jenkins часто возникает путаница между заданиями и строками, особенно потому, что задания часто называются "заданиями сборки".
- Задания (или "строить задания" или "проекты" ) содержат конфигурацию, которая описывает, что нужно запускать и как ее запускать.
- Строки - это выполнение задания. Строка содержит информацию о времени начала и окончания, состоянии, протоколировании и т.д.
Подробнее см. https://wiki.jenkins-ci.org/display/JENKINS/Building+a+software+project.
Если вам нужны задания, которые в настоящее время строятся (т.е. имеют один или несколько запусков сборки), самым быстрым способом является использование REST API с XPath для фильтрации по цвета, которые заканчиваются на _anime
, например:
http://jenkins.example.com/api/xml?tree=jobs[name,url,color]&xpath=/hudson/job[ends-with(color/text(),%22_anime%22)]&wrapper=jobs
даст вам что-то вроде:
<jobs>
<job>
<name>PRE_DB</name>
<url>http://jenkins.example.com/job/my_first_job/</url>
<color>blue_anime</color>
</job>
<job>
<name>SDD_Seller_Dashboard</name>
<url>http://jenkins.example.com/job/my_second_job/</url>
<color>blue_anime</color>
</job>
</jobs>
Jenkins использует поле color
, чтобы указать статус задания, где суффикс _anime
указывает, что в настоящее время выполняется задание.
К сожалению, это не даст вам никакой информации о фактическом запуске сборки. Несколько экземпляров задания могут работать одновременно, а работающая сборка не всегда является последней.
Если вы хотите перечислить все запущенные сборки, вы также можете использовать REST API для быстрого ответа, например:
http://jenkins.example.com/computer/api/xml?tree=computer[executors[currentExecutable[url]],oneOffExecutors[currentExecutable[url]]]&xpath=//url&wrapper=builds
Вы получите что-то вроде:
<builds>
<url>http://jenkins.example.com/job/my_first_job/1412/</url>
<url>http://jenkins.example.com/job/my_first_job/1414/</url>
<url>http://jenkins.example.com/job/my_second_job/13126/</url>
</builds>
Здесь вы видите список всех запущенных в данный момент сборок. Вам нужно будет проанализировать URL-адрес, чтобы отделить имя задания от номера сборки. Обратите внимание, что my_first_job
имеет две сборки, которые в настоящее время запущены.
Ответ 3
Немного взлома, но я думаю, вы можете сделать вывод о том, какие задания выполняются в настоящее время, глядя на цветной ключ в объектах задания, когда вы выполняете GET
в /jenkins/api/json?pretty=true
. Если значок "шарик" для заданного задания в Jenkins анимирован, мы знаем, что он работает.
Посмотрите на массив объектов задания в ответе JSON:
{
...
"jobs" : [
{
"name" : "Test Job 1",
"url" : "http://localhost:8000/jenkins/job/Test%20Job%201/",
"color" : "blue"
},
{
"name" : "Test Job 2",
"url" : "http://localhost:8000/jenkins/job/Test%20Job%202/",
"color" : "blue_anime"
}
...
}
В этом случае "color" : "blue_anime"
указывает, что задание в данный момент запущено, а "color" : "blue"
указывает, что задание не запущено.
Надеюсь, что это поможет.
Ответ 4
Вы можете сделать это с помощью дерева jenkins api, используя конечную точку, подобную этой:
http://<host>/api/json?tree=jobs[name,lastBuild[building,timestamp]]
Вы можете увидеть, какие атрибуты из lastBuild
вы можете использовать, если имеете доступ к <job-endpoint>/lastBuild/api/json
.
Ответ 5
Маршал выход и фильтр для "building: true" из следующего вызова json api на задание с деревом, чтобы отфильтровать посторонний материал (надеюсь, это поможет):
http://jenkins.<myCompany>.com/job/<myJob>/api/json?pretty=true&depth=2&tree=builds[builtOn,changeSet,duration,timestamp,id,building,actions[causes[userId]]]
даст вам что-то вроде:
{
"builds" : [
{
"actions" : [
{
},
{
"causes" : [
{
"userId" : "cheeseinvert"
}
]
},
{
},
{
},
{
},
{
}
],
"building" : true,
"duration" : 0,
"id" : "2013-05-07_13-20-49",
"timestamp" : 1367958049745,
"builtOn" : "serverA",
"changeSet" : {
}
}, ...
Ответ 6
У меня была аналогичная проблема, когда некоторые сборки трубопроводов застревают в состоянии здания после того, как я перезапускаю jenkins (рабочие задания предполагаются долговечными и возобновляются, но большую часть времени они застряли бесконечно).
Эти сборки не используют исполнителя, поэтому единственный способ найти их - открыть каждую работу.
Все остальные ответы, похоже, работают, когда проект считается зданием, т.е. последняя сборка строится. Но они игнорируют прежние сборки, которые все еще строятся.
Следующий запрос работает для меня и дает мне все текущие запущенные сборки, т.е. они не имеют результата.
http://localhost:8080/api/xml?tree=jobs[name,builds[fullDisplayName,id,number,timestamp,duration,result]]&xpath=/hudson/job/build[count(result)=0]&wrapper=builds