Вызов Jenkins Api (Или Встроенная Функция Groovy), Который Возвращает Список Всех Запущенных В Данный Момент Сборок Заданий.

  • Автор темы Ilonabokser
  • Обновлено
  • 22, Oct 2024
  • #1

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

Мне нужно посмотреть, выполняется ли уже одно задание. Например, верните одно значение, если выполняется 1 сборка задания, и другое значение, если выполняются 2 или более сборок.

Вариант использования здесь заключается в том, что мы автоматизировали создание образа для сборки после успешных модульных тестов. Он настроен на создание максимум одного образа каждые семь часов, проверяя время сборки последнего образа и отменяя сборку, если оно прошло менее 7 часов. Это отлично работает для большинства случаев. Однако создание этих изображений занимает около 20 минут. Если прошло более 7 часов и два Модульные тесты завершаются с разницей менее чем в 20 минут, вторая сборка не замечает создания первой и продолжает сборку. Мы получаем два функционально идентичных изображения, сделанных каждые 7 часов с разницей всего в несколько минут. Я хотел бы проверить состояние задания контроллера, чтобы узнать, запущено ли оно уже, чтобы вторая сборка могла отменить его.

Я попробовал свернуть следующий API, но оказалось, что он не регистрирует отдельные сборки, а только то, что задание выполняется в целом, что в данном случае бесполезно, поскольку оно запускается автоматически, поскольку проверка означает, что оно уже запущено. ; нет никакой разницы между одной сборкой и несколькими сборками.

 http://JENKINS_URL/api/xml?tree=jobs[name,url,color]&xpath=/hudson/job[ends-with(color/text(),%22_anime%22)]&wrapper=jobs
 

TL;DR: Могу ли я сделать другой вызов, который вернет некоторый список/файл/содержимое, указывающий, что в данный момент выполняется несколько сборок одного и того же задания?

#jenkins #jenkins-pipeline

Ilonabokser


Рег
08 May, 2020

Тем
78

Постов
209

Баллов
639
  • 25, Oct 2024
  • #2

Оказывается, вы можете перейти по следующему URL-адресу, чтобы получить XML-вывод всех запущенных в данный момент сборок, включая их номера.

 
 
 Build 

я Jenkins.getItemByFullName() ed it for a count and used that for my calculations.

 

Biron


Рег
26 Apr, 2007

Тем
58

Постов
180

Баллов
500
  • 25, Oct 2024
  • #3

Я использовал консоль сценариев Groovy, чтобы получить его следующим образом:

Jenkins.getItemByFullName()

или если вы хотите Jenkins.instance.computers.collect {c -> c.executors}. flatten(). findAll { executor -> executor.isBusy() }. collect { executor -> def u = executor.currentExecutable.url def n = executor.currentExecutable.number def job_qual_name = u.split('/')[0..-2].findAll { it != 'job' }.join('/') def job = Jenkins.instance.getItemByFullName(job_qual_name, Job.class) job.getBuildByNumber(build.number) } class, this:

Build

Очень обидно, что Jenkins не предоставляет что-то столь же простое с понятным API высокого уровня.

Очень некрасиво, что пути, используемые заданиями плагина папок, не работают с def executables = Jenkins.instance.computers.collect {c -> c.executors}. def runs = Jenkins.instance.computers.collect {c -> c.executors}. flatten(). findAll { executor -> executor.isBusy() }. collect { executor -> executor.getCurrentExecutable() }. collect { executable -> "${executable.displayName}: ${executable.number}" } without munging. Ick. Also that grep похоже, не поддерживает получение http://jenkinsURL/computer/api/xml?tree=computer[executors[currentExecutable[url]],oneOffExecutors[currentExecutable[url]]]&xpath=//url&wrapper=builds .

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

 

PROPHYDAY69


Рег
02 Mar, 2011

Тем
66

Постов
195

Баллов
535
Похожие темы Дата
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно