Jenkins Build / Pipeline job - Список вакансий в упорядоченном списке в виде дерева или макета - PullRequest
0 голосов
/ 28 апреля 2018

Возможно ли, что для данного задания Build Pipeline (которое имеет нижестоящие задания в действии сборки или после сборки как "Trigger build on other projects"), я могу получить представление списка дерева, показывающее, какое вызванное задание Pipeline # N, что дочерние задания в порядке вызова (последовательном или параллельном) с дочерней сборкой # для этого конвейера запускают сборку #.

Например: если мое конвейерное задание имеет такой вид: enter image description here то

Я ожидаю получить список верхнего запуска, аналогичный ( на случай, если я просто введу простой текстовый формат ):

vac-3.0-src:52 called: vac-3.0-unit-test-main:37
vac-3.0-unit-test-main:37 called: vac-3.0-unit-testA:36
vac-3.0-unit-test-main:37 called: vac-3.0-unit-testB:36
vac-3.0-unit-test-main:37 called: vac-3.0-unit-testC:35
vac-3.0-unit-test-main:37 called: vac-3.0-unit-testD:35
vac-3.0-unit-test-main:37 called: vac-3.0-unit-testReporting:35
vac-3.0-unit-testReporting:35 called: vac-3.0-integration-test-main:28
vac-3.0-integration-test-main:28 called: vac-3.0-integration-testA:27
vac-3.0-integration-test-main:28 called: vac-3.0-integration-testB:27
vac-3.0-integration-testB:27 called: vac-3.0-acceptance-test:25
vac-3.0-acceptance-test:25 called: vac-3.0-configure-something:24 
vac-3.0-configure-something:24 called: vac-3.0-perform-someaction:23
vac-3.0-perform-someaction:23 called: vac-3.0-preview-step:22
vac-3.0-preview-step:22 called: vac-3.0-deb-delivery-job:27
vac-3.0-preview-step:22 called: vac-3.0-rpm-el6:23
vac-3.0-preview-step:22 called: vac-3.0-vagrant-provision:20
vac-3.0-preview-step:22 called: vac-3.0-vagrant-run:21
vac-3.0-vagrant-run:21 called: vac-3.0-demo:10

ИЛИ эта информация может быть представлена ​​в более надежной структурной форме, т. Е. Это может быть BLOB-объект JSON, в котором родительское задание имеет структуру, в которой будут все задания, которые он вызвал (параллельные / последовательные) в конвейерном выполнении / заданном порядке.

Я попробовал URL-адрес основного задания (через curl) с помощью Jenkins API, т.е. /api/xml or /api/json?pretty=true&depth=10 или более, но он не дает мне информацию, которую я ищу (связанную с заданным прогоном конвейера).

Эта информация визуально доступна в представлении конвейера (согласно изображению), а некоторая информация о подпроектах доступна на информационной панели данного задания Jenkins (которая была частью конвейера), но порядка там нет.

Буду признателен, если вы попытались решить эту проблему и нашли какое-либо решение для получения этих данных. Причина этих усилий заключается в том, чтобы найти метрики по горизонтали для данного прогона конвейера (а не по вертикали для каждого отдельного задания, являющегося частью конвейера, поскольку у меня уже есть вертикальные / индивидуальные метрики задания для общего времени, номера сборки, результата и т. Д.), Но как Я могу связать метрики каждой отдельной работы для данного запуска конвейера, вот что я пытаюсь получить.

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

enter image description here

1 Ответ

0 голосов
/ 28 апреля 2018

Я вижу одно возможное решение, не уверен, что это полезно, но, конечно, это попытка.

Шаги алгоритма:
==============
1) Поддерживать файл Direct Parent-Child (т. Е. JobA: JobB, JobA: JobC, JobA: JobC, JobC: JobD, ....), т. Е. Этот файл сообщит, что для каждого Job X , что являются прямыми дочерними / нижестоящими заданиями этого. С помощью скрипта Jenkins Groovy это может быть легко сгенерировано / доступно. PS: Вы можете добавить больше столбцов в этот файл, например, JobA: JobB: Build: Sequential или JobA: JobB: Test: Parallel, чтобы получить еще лучшие горизонтальные метрики для расчета времени выполнения / на данный шаг (сборка, тестирование) , развернуть и т. д.), а также указывать, называется ли родительское задание дочерним заданием в последовательности или параллельно с двумя или более заданиями) и соответствующим образом рассчитывать показатели.

2) Внутри «Построить представление конвейера» Настройте (Настройки), установите номер. заданий, которые будут отображаться как 1.
PS : Вы можете установить это значение равным 5, 10 или более, если вы хотите захватить данный номер сборки конвейера этого задания основного конвейера.

Для целей тестирования я показываю только 1 прогон сборки конвейера. enter image description here

3) В Linux используйте curl, получите информацию HTML-страницы «Просмотр исходного кода» в имени сборочного конвейера * ИМЯ 1022 * ( PS : Это НЕ на основной работе трубопровода). то есть ** не для jobA или xxvt-main или ** в этом случае, но использовать URL-адрес просмотра имени (который показывает весь конвейер). Давайте предположим, что имя представления (через плагин Build Pipeline View) было создано как " MyPipelineView " например: curl -s http://my-jenkins-server:8080/view/MyPipelineView/ > /tmp/9.txt

Это даст вам HTML-контент. Сохраните эту информацию в каком-то файле (Временный). Давайте предположим, что я сохранил его в /tmp/9.txt

3) Запустите следующую команду, чтобы получить номер сборки задания. Согласно второму меньшему изображению конвейера (в моем посте), результат будет:

grep -o "\"extId\":\"[a-zA-Z0-9_-][a-zA-Z0-9_-]*#[0-9][0-9]*\"" /tmp/9.txt

Это даст вам вывод наподобие (используйте sed / cut, чтобы сделать его более чистым):

"extId":"xxvt_main#157"
"extId":"xxvt_splunk_run_collect_operation#29"
"extId":"xxvt_splunk_run_process_operation#29"
"extId":"xxvt_splunk_update_date_restart_splunk#29"
"extId":"xxvt_splunk_get_jenkins_data#38"
"extId":"xxvt_splunk_get_clearquest_dr_data#47"

4) Теперь у вас есть вышеуказанный вывод для данного запуска конвейера, используя файл Parent-Child (прямые отношения) (который мы сгенерировали в пуле 1), мы можем использовать его для создания нашего окончательного файла Build Pipeline Tree, т.е.

xxvt_main#157 called: xxvt_splunk_get_jenkins_data#38
xxvt_main#157 called: xxvt_splunk_get_clearquest_dr_data#47
xxvt_main#157 called: xxvt_splunk_run_collect_operation#29
xxvt_splunk_run_collect_operation#29 called: xxvt_splunk_run_process_operation#29
xxvt_splunk_run_process_operation#29 called: xxvt_splunk_update_date_restart_splunk#29

5) Зная данный прогон, связанный имя-задания и его сборка # , мы можем осторожно использовать api/json?pretty=true&depth=1 or 2 or 3 Дженкинса, чтобы выбрать поля мы хотим получить метрики и, наконец, создать / придумать файл .csv в любом формате, который вам нравится, , который будет иметь метрики для данного запуска конвейера - HORIZONTALLY .

...