Назад | Перейти на главную страницу

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

Мы можем получить список всех заданий с их текущим состоянием с помощью этого вызова API:

/view/<pipeline-name>/api/json

Также мы можем получить данные о последней завершенной сборке любая конкретная работа:

/job/<jobname>/lastCompletedBuild/api/json

Мой вопрос: как лучше всего получить данные обо всех последних завершенных сборках в конвейере? В настоящее время я запрашиваю такую ​​информацию параллельно, но, надеюсь, есть более простой способ сделать это. Даже если «легче» означает что-то выиграть с точки зрения простоты, но потерять параллелизм.

Есть несколько способов получить данные из Jenkins API, в зависимости от форматирования, деталей и т. Д.

В этом примере я буду использовать общедоступный сервис Jenkins из Ubuntu построить трубопровод.

  1. Использовать 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" ...

  2. Используйте язык более высокого уровня для анализа вывода. 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 для выбора нужных полей, как показано в предыдущих примерах.