Jenkins Build / Pipeline job - Список вакансий в упорядоченном списке в виде дерева или макета
Возможно ли, что для данного задания Build Pipeline (которое имеет нижестоящие задания в действии сборки или после сборки как "Trigger build on other projects
"), Я могу получить представление списка дерева, показывающее, какое вызванное конвейерное задание # N, какие дочерние задания в порядке вызова (последовательном или параллельном) с дочерним билдом # для этого конвейера запускают сборку #.
Например: если моя конвейерная работа имеет такой вид: затем,
Я ожидаю получить список верхнего прогона, похожего на (в случае, если я просто поместил в простом текстовом формате):
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 (которая была частью конвейера), но порядка там нет.
Я буду признателен, если вы попытались решить эту проблему и нашли какое-либо решение для получения этих данных. Причина этих усилий заключается в том, чтобы найти метрики по горизонтали для данного запуска конвейера (а не по вертикали для каждого отдельного задания, являющегося частью конвейера, поскольку у меня уже есть вертикальные / индивидуальные метрики задания для общего времени, номера сборки, результата и т. Д.), Но как Я могу соотнести метрики каждой отдельной работы для конкретного запуска конвейера, вот что я пытаюсь получить.
Если приведенный выше пример изображения достаточно велик, мы можем сослаться на меньший снимок прогона:
1 ответ
Я вижу одно возможное решение, не уверен, что это полезно, но, конечно, это попытка.
Шаги алгоритма:
==============
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 прогон сборки конвейера.
3) В Linux используйте curl
, получите информацию HTML-страницы "Просмотр исходного кода" для ИМЕНИ build-pipe-view (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) Запустите следующую команду, чтобы получить build#s задания. Согласно второму меньшему изображению конвейера (в моем посте), результат будет:
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) Зная имя задания, относящееся к данному прогону, и его номер сборки, мы можем использовать Jenkins's api/json?pretty=true&depth=1 or 2 or 3
осторожно, чтобы получить поля, которые мы хотим выбрать для метрик, и, наконец, создать / придумать файл.csv в любом формате, который вам нравится, который будет иметь метрики для данного запуска конвейера - ГОРИЗОНТАЛЬНО.
Если вы работаете с Jenkinsfile DSL и т. Д. Я добился этого путем динамического создания этапов, запуска их параллельно, а также получения пользовательского интерфейса Jenkinsfile для отображения отдельных столбцов. Это предполагает, что параллельные шаги независимы друг от друга (в противном случае не используйте параллель), и вы можете вкладывать их настолько глубоко, насколько хотите (в зависимости от цикла for).
Jenkinsfile Pipeline DSL: как отображать несколько столбцов в графическом интерфейсе панели задач - Для всех динамически создаваемых этапов - Находясь в разделе ТРУБОПРОВОД, подробнее см. Здесь.