Jenkins Build / Pipeline 作业 - 作业在树中的列表/布局有序列表
Jenkins Build / Pipeline job - Job's listing in tree / layout ordered listing
是否有可能对于给定的构建管道作业(在构建或 post 构建操作中有下游作业作为“Trigger build on other projects
”),我可以获得一个树列表视图显示调用了哪个 Pipeline job# N,该管道的子 build# 的调用顺序(顺序或并行)中有哪些子作业 运行 build#。
例如:如果我的管道作业有这个视图:
那么,
我希望获得类似于(如果我只是输入简单文本格式)的顶部运行列表:
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
或者此信息可以以更稳健的结构方式呈现,即它可以是 JSON blob,其中父作业的结构将包含它调用的所有作业 (parallel/sequence)管道 运行 / 给定顺序。
我用 Jenkins API 尝试了主要工作的 URL(通过 curl),即 /api/xml or /api/json?pretty=true&depth=10
或更多,但它没有给我我正在寻找的信息(与给定管道相关 运行)。
此信息在管道视图上可见(如图所示),并且在给定的 Jenkins 作业的仪表板上(它是管道的一部分)上提供了有关子项目的一些信息,但顺序不存在。
如果您尝试解决此问题并有任何解决方案来获取此数据,我将不胜感激。这样做的原因是为给定管道 运行 水平查找指标(而不是垂直查找作为管道一部分的每个单独作业,因为我已经有了总时间、构建#、结果的垂直/单个作业指标等),但我如何将给定管道的每个作业的指标关联起来 运行,这就是我想要得到的。
如果上面的图片示例足够大,我们可以在这里参考较小的运行图片快照:
我看到了一个可能的解决方案,不确定是否有帮助,但肯定是一种尝试。
算法步骤:
==============
1)维护一个直接父子文件(即JobA:JobB,JobA:JobC,JobA:JobC,JobC:JobD,......)即这个文件将告诉每个作业X,它的直接Sub-child/downstream工作是什么。通过 Jenkins Groovy 脚本,这很容易 generated/available。 PS: 您可以向此文件添加更多列,即 JobA:JobB:Build:Sequential 或 JobA:JobB:Test:Parallel 以获得更好的水平指标用于计算周转时间/每个给定步骤(构建、测试、部署等)以及父作业是按顺序调用子作业还是与两个或多个作业并行调用)并相应地计算指标。
2) 在 "Build Pipeline View" Configure (Settings) 中,设置编号。要显示为 1 的作业数。
PS:如果要捕获给定的管道构建,可以将其设置为 5、10 或更多# 该主要管道作业。
出于测试目的,我只展示了 1 个管道构建 运行。
3) 在Linux中,使用curl
,在build-pipeline-view[=53]上获取"View Source"HTML页面信息 =] 的名称(PS:这是 NOT on 主管道作业)。
即**在这种情况下不适用于 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) 运行 以下命令获取作业的构建#s。根据第二个较小的管道图像(在我的 post 中),输出将是:
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) 现在您有了给定管道 运行 的上述输出,使用父子(直接关系)文件(我们在项目符号 1 中生成),我们可以使用它来创建我们的最终构建管道树文件即
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) 在知道 a 给定的 运行 相关 job-name 和 its build# ,我们可以小心使用 Jenkins 的 api/json?pretty=true&depth=1 or 2 or 3
来获取我们想要获取指标的字段,最后 create/come 得到一个你喜欢的任何格式的 .csv 文件,它将具有给定管道的指标 运行 - HORIZONTALLY.
如果您正在使用 Jenkinsfile DSL 等。
我通过动态创建阶段来实现它,运行 它们并行并让 Jenkinsfile UI 显示单独的列。这假设并行步骤彼此独立(否则不要使用并行)并且您可以将它们嵌套到你想要的深度(取决于 for 循环)。
Jenkinsfile Pipeline DSL: How to Show Multi-Columns in Jobs dashboard GUI - For all Dynamically created stages - When within PIPELINE section 看这里了解更多。
是否有可能对于给定的构建管道作业(在构建或 post 构建操作中有下游作业作为“Trigger build on other projects
”),我可以获得一个树列表视图显示调用了哪个 Pipeline job# N,该管道的子 build# 的调用顺序(顺序或并行)中有哪些子作业 运行 build#。
例如:如果我的管道作业有这个视图:
我希望获得类似于(如果我只是输入简单文本格式)的顶部运行列表:
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
或者此信息可以以更稳健的结构方式呈现,即它可以是 JSON blob,其中父作业的结构将包含它调用的所有作业 (parallel/sequence)管道 运行 / 给定顺序。
我用 Jenkins API 尝试了主要工作的 URL(通过 curl),即 /api/xml or /api/json?pretty=true&depth=10
或更多,但它没有给我我正在寻找的信息(与给定管道相关 运行)。
此信息在管道视图上可见(如图所示),并且在给定的 Jenkins 作业的仪表板上(它是管道的一部分)上提供了有关子项目的一些信息,但顺序不存在。
如果您尝试解决此问题并有任何解决方案来获取此数据,我将不胜感激。这样做的原因是为给定管道 运行 水平查找指标(而不是垂直查找作为管道一部分的每个单独作业,因为我已经有了总时间、构建#、结果的垂直/单个作业指标等),但我如何将给定管道的每个作业的指标关联起来 运行,这就是我想要得到的。
如果上面的图片示例足够大,我们可以在这里参考较小的运行图片快照:
我看到了一个可能的解决方案,不确定是否有帮助,但肯定是一种尝试。
算法步骤:
==============
1)维护一个直接父子文件(即JobA:JobB,JobA:JobC,JobA:JobC,JobC:JobD,......)即这个文件将告诉每个作业X,它的直接Sub-child/downstream工作是什么。通过 Jenkins Groovy 脚本,这很容易 generated/available。 PS: 您可以向此文件添加更多列,即 JobA:JobB:Build:Sequential 或 JobA:JobB:Test:Parallel 以获得更好的水平指标用于计算周转时间/每个给定步骤(构建、测试、部署等)以及父作业是按顺序调用子作业还是与两个或多个作业并行调用)并相应地计算指标。
2) 在 "Build Pipeline View" Configure (Settings) 中,设置编号。要显示为 1 的作业数。
PS:如果要捕获给定的管道构建,可以将其设置为 5、10 或更多# 该主要管道作业。
出于测试目的,我只展示了 1 个管道构建 运行。
3) 在Linux中,使用curl
,在build-pipeline-view[=53]上获取"View Source"HTML页面信息 =] 的名称(PS:这是 NOT on 主管道作业)。
即**在这种情况下不适用于 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) 运行 以下命令获取作业的构建#s。根据第二个较小的管道图像(在我的 post 中),输出将是:
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) 现在您有了给定管道 运行 的上述输出,使用父子(直接关系)文件(我们在项目符号 1 中生成),我们可以使用它来创建我们的最终构建管道树文件即
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) 在知道 a 给定的 运行 相关 job-name 和 its build# ,我们可以小心使用 Jenkins 的 api/json?pretty=true&depth=1 or 2 or 3
来获取我们想要获取指标的字段,最后 create/come 得到一个你喜欢的任何格式的 .csv 文件,它将具有给定管道的指标 运行 - HORIZONTALLY.
如果您正在使用 Jenkinsfile DSL 等。 我通过动态创建阶段来实现它,运行 它们并行并让 Jenkinsfile UI 显示单独的列。这假设并行步骤彼此独立(否则不要使用并行)并且您可以将它们嵌套到你想要的深度(取决于 for 循环)。
Jenkinsfile Pipeline DSL: How to Show Multi-Columns in Jobs dashboard GUI - For all Dynamically created stages - When within PIPELINE section 看这里了解更多。