Мы можем получить список всех заданий с их текущим состоянием с помощью этого вызова API:
/view/<pipeline-name>/api/json
Также мы можем получить данные о последней завершенной сборке любая конкретная работа:
/job/<jobname>/lastCompletedBuild/api/json
Мой вопрос: как лучше всего получить данные обо всех последних завершенных сборках в конвейере? В настоящее время я запрашиваю такую информацию параллельно, но, надеюсь, есть более простой способ сделать это. Даже если «легче» означает что-то выиграть с точки зрения простоты, но потерять параллелизм.
Есть несколько способов получить данные из Jenkins API, в зависимости от форматирования, деталей и т. Д.
В этом примере я буду использовать общедоступный сервис Jenkins из Ubuntu построить трубопровод.
Использовать curl
, jq
и sort
в командной строке
curl -s https://jenkins.qa.ubuntu.com/view/Precise/view/All%20Precise/api/json | jq -r '.jobs[] | [.color, .name] | @csv' | sort
Выходные данные из этого подкаталога конвейера (Precise / All Precise) анализируются, где blue
= прохождение, red
= сбой.
Вот образец вывода:
...
"blue","precise-server-i386_raid1"
"blue","precise-server-i386_samba-server"
"blue","precise-server-i386_tomcat-server"
"blue","precise-server-i386_virtual-host"
"red","precise-adt-apport"
"red","precise-adt-apport-armhf"
"red","precise-adt-chromium-browser"
"red","precise-adt-chromium-browser-armhf"
"red","precise-adt-chromium-browser-ppc64el"
...
Используйте язык более высокого уровня для анализа вывода. XML, Python, Ruby - все это жизнеспособные варианты, все зависит от вашего варианта использования и того, как вы хотите представить данные в дальнейшем.
Здесь не приводится никаких примеров, поскольку термины все еще слишком широки в отношении того, какие данные вы хотите получить и как вы хотите их отправить.
** РЕДАКТИРОВАТЬ **
В комментариях @shabunc объясняет, что желает получить информацию (до сих пор неясно, какая информация или данные ищутся, поэтому я использую один пример) о последних завершенных сборках.
Использование модификатора запроса API для depth
к исходному вызову открывает другой уровень подробностей относительно исходной конечной точки запроса.
В этом примере мы расширяем тот же конвейер (представление) еще на один уровень, используя depth=1
параметр запроса и получает номер последней завершенной сборки для каждого задания.
curl -s 'https://jenkins.qa.ubuntu.com/view/Precise/view/All%20Precise/api/json?depth=1' | jq -r '.jobs[] | [.color, .name, .lastCompletedBuild.number] | @csv' | sort
Результаты теперь включают номер сборки каждого задания:
...
"blue","precise-server-i386_raid1",910
"blue","precise-server-i386_samba-server",909
"blue","precise-server-i386_tomcat-server",901
"blue","precise-server-i386_virtual-host",905
"red","precise-adt-apport",2
"red","precise-adt-apport-armhf",1
"red","precise-adt-chromium-browser",2
"red","precise-adt-chromium-browser-armhf",1
"red","precise-adt-chromium-browser-ppc64el",2
...
Вы можете изучить все возвращенные поля с помощью следующей команды:
curl -s 'https://jenkins.qa.ubuntu.com/view/Precise/view/All%20Precise/api/json?depth=1' | jq '.jobs[0]'
Это вернет первое задание в списке со всеми полями, возвращенными из depth
модификатор уровня.
Затем вы можете использовать методы доступа jq для выбора нужных полей, как показано в предыдущих примерах.