【问题标题】:Jenkins Build / Pipeline job - Job's listing in tree / layout ordered listingJenkins Build / Pipeline 作业 - 树中的作业列表 / 布局有序列表
【发布时间】:2018-10-08 20:17:13
【问题描述】:

是否有可能对于给定的构建管道作业(在构建或构建后操作中有下游作业为“Trigger build on other projects”),我可以获得一个树列表视图,显示哪个管道作业# 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,其中父作业具有结构,该结构将具有在管道运行/给定顺序中调用(并行/顺序)的所有作业。

我使用 Jenkins API (即/api/xml or /api/json?pretty=true&depth=10 或更多)尝试了主要作业的 URL(通过 curl),但它没有提供我正在寻找的信息(与给定的管道运行相关)。

此信息在管道视图中可见(如图所示),有关子项目的一些信息可在给定 Jenkins 作业的仪表板(这是管道的一部分)上提供,但顺序不存在。

如果您尝试解决此问题并有任何解决方案来获取此数据,我们将不胜感激。这项工作的原因是为给定的管道运行水平查找指标(而不是垂直地为作为管道一部分的每个单独的作业,因为我已经有了总时间、构建#、结果等的垂直/单独的作业指标)但是如何我可以将给定管道运行的每个单独作业的指标关联起来,这就是我想要得到的。

如果上面的图像示例足够大,我们可以在这里参考一个较小的运行图像快照:

【问题讨论】:

    标签: jenkins jenkins-plugins build-pipeline-plugin


    【解决方案1】:

    我看到了一种可能的解决方案,不确定这是否有用,但肯定是一种尝试。

    算法步骤:
    ==============
    1) 维护一个直接父子文件(即 JobA:JobB, JobA:JobC, JobA:JobC, JobC:JobD, ....),即这个文件会告诉每个 JobX,什么是直接的子子/下游工作。通过 Jenkins Groovy 脚本,这可以很容易地生成/可用。 PS:您可以在此文件中添加更多列,即 JobA:JobB:Build:Sequential 或 JobA:JobB:Test:Parallel 以获得更好的水平指标来计算周转时间/每个给定步骤(构建,测试、部署等)以及父作业是按顺序调用子作业还是与两个或多个作业并行调用)并相应地计算指标。

    2)在“构建管道视图”配置(设置)中,设置编号。要显示为 1 的作业数。
    PS:如果要捕获该主管道作业的给定管道构建#,您可以将其设置为 5、10 或更多。 p>

    出于测试目的,我只展示了 1 个管道构建运行。

    3) 在Linux中,使用curl,获取在build-pipeline-view的NAME上的“查看源代码”HTML页面信息(PS:这个不在主管道作业上)。 即 ** 在这种情况下不适用于 jobA 或 xxvt-main 或 **,而是使用 View Name 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) 现在您有了给定管道运行的上述输出,使用父子(直接关系)文件(我们在项目符号 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) 在了解给定运行相关 job-name其构建# 后,我们可以谨慎使用 Jenkins 的 api/json?pretty=true&depth=1 or 2 or 3,获取我们想要获取指标的字段,最后以您喜欢的任何格式创建/提供一个 .csv 文件,它将具有给定管道运行的指标 - 水平

    【讨论】:

      【解决方案2】:

      如果您正在使用 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查看更多信息。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-08
        • 1970-01-01
        • 2020-05-14
        • 1970-01-01
        相关资源
        最近更新 更多