当前位置: 首页 > 知识库问答 >
问题:

Jenkins-如何在下游获取和使用上游信息

金昌胤
2023-03-14

执行称为“A”的上游作业。在下游项目“B”执行测试用例成功时。但是,在从B发送邮件时,我们必须在邮件中包含上游项目详细信息(上游项目名称,构建号)。因此,我们可以轻松地将测试运行映射到相应的上游作业。

在下游项目仪表板下方显示详细信息。

Started by upstream project Dev_RM_3.0_CI_Test build number 10
originally caused by:

我签到 https://wiki.jenkins-ci.org/display/JENKINS/Building 一个软件项目。但在下游找不到任何可以继承的东西。

创建了具有以下详细信息的示例作业以显示当前作业详细信息。

echo $BUILD_NUMBER
echo $JOB_NAME
echo $BUILD_ID

但输出是

Building on master in workspace /var/lib/jenkins/workspace/env
[env] $ /bin/sh -xe /tmp/hudson970280339057643719.sh
+ echo 1
1
+ echo env
env
+ echo 1
1
Finished: SUCCESS
  1. 对继承下游作业的上游细节有帮助吗?
  2. 如何获取当前的工作详细信息?

共有3个答案

燕烨
2023-03-14

您可以简单地在下游作业中使用params.variableName来检索从上游参数作业传递的参数。您的下游作业不一定是参数化作业。

姜献
2023-03-14

您可以通过构建参数将上游变量传递给下游作业,然后可以使用${ my parameter 1 }和${ my parameter 2 }等工具访问它们(在下游作业中)。

您需要:

    < li >向下游作业添加构建参数。例如,名为“ParentJobName”的字符串参数。 < li >向上游作业添加后期生成“在其他项目上触发下游参数化生成”。 < li >在#2中添加类似“当前构建参数”或“预定义参数”的内容,并传递您需要的任何内容。例如:< code > parent JOB NAME = $ { JOB _ NAME } < li >像访问其他构建html" target="_blank">变量一样访问参数。例如${ parent job name }

你应该能够通过这种方式传递基本信息。任何比这更复杂的事情,您可能最好使用像复制工件插件这样的插件来复制文件,或者在系统groovy步骤中使用Jenkins API来获取/修改上游构建,等等。

严宏朗
2023-03-14

例如,您引用您的问题“由上游项目启动”Chained/1-First“build number 34”的消息在jenkins原因中可用。

Jenkins 将上游构建信息保存在其原因对象中。如果您使用的是构建DSL或Pipelines,您可能会以时髦的方式获得它。或者,您可以卷曲作业 URL 并使用 jq 获取原因

例如卷曲http://localhost:8080/job/Chained/job/2-Second/17/api/json

"_class": "org.jenkinsci.plugins.workflow.job.WorkflowRun",
"actions": [{
  "_class": "hudson.model.CauseAction",
  "causes": [{
    "_class": "hudson.model.Cause$UpstreamCause",
    "shortDescription": "Started by upstream project \"Chained/1-First\" build number 34",
    "upstreamBuild": 34,
    "upstreamProject": "Chained/1-First",
    "upstreamUrl": "job/Chained/job/1-First/"
  }]
}

或者从管道中例如:

node() {
    stage('downstream') {
        def upstream = currentBuild.rawBuild.getCause(hudson.model.Cause$UpstreamCause)
        echo upstream?.shortDescription
    }
}

您可以从原因中获取大量信息,等待所有脚本批准或全局共享步骤。如果不同的原因触发了此构建,例如提交或用户,您将获得一个空值。

 类似资料:
  • 问题内容: 我有3个版本:A-是控制流量的主版本B-注释者版本C- 将在BI要向A添加String参数后执行,因此用户将手动输入一些String,但我不确定如何我可以将此参数传递给B吗?可以说这是我的构建流程: build(“ B”)build(“ C”)我不知道如何将参数传递到B,我应该从构建流程还是从B构建配置中做到这一点,我该怎么做。 预先感谢亚历克斯 问题答案: 像这样: https://

  • Jenkins场景详细信息: ====================== -Jenkins中构建执行器的数量(在主/从上):3 -UpStream作业:USJobs,此作业可以在任何构建执行器上运行 -DownStream作业:DSJobs USJob在构建步骤中有这个:回声“生日快乐詹姆斯”,完成这项工作需要5秒钟 DSJob在构建步骤中有这个:回显“詹姆斯邦德死了”,完成这项工作 需要5秒钟

  • 问题内容: 我想获得所有上游作业,就像在控制台输出中一样: 我已经尝试使用以下命令进行groovy postbuild: 但是我只能得到“分配”,而不是“开始”工作。 我也尝试过 但这是空的… 有任何想法吗? 问题答案: 您已接近第一个解决方案。 实际上,您需要做的就是根据其类型对它的祖先进行迭代。 这是一个示例代码片段,可以帮助您入门: 您可能需要参考文档来处理所有类型:http : //jav

  • 问题内容: 我们想动态地触发詹金斯中不同下游版本中的集成测试。我们有一个参数化的集成测试项目,该项目将测试名称作为参数。我们从git repo动态确定测试名称。 我们有一个父项目,该项目使用jenkins-cli为源代码中发现的每个测试启动集成项目的构建。父项目和集成项目通过匹配的指纹相关联。 这种方法的问题是汇总测试结果不起作用。我认为问题在于“下游”集成测试是通过jenkins-cli启动的,

  • 问题内容: 我正在创建一个应用程序,但遇到了问题。当我尝试使用此函数获取值时,我有一个返回值: 我不知道如何在中获取字段的值。如果我这样做: 我仅获取列的名称(),而不获取值。关于如何实现这一目标的任何建议? 问题答案: 我认为您可以忘记检查null。 而是检查是否有数据,然后使用游标访问列: 阅读Android教程可能也很有意义。记事本教程似乎很合适:http : //developer.and

  • 6.6.1 概述 网站内容由诸多页面构成,当我们需要从宏观的角度分析流量在网站内的流动时,可通过查看路径分析报表。而当我们需要从微观的视角分析流经一个特定页面的流量时,则可以利用页面上下游报表。它清晰的展示了一个特定页面的上下游页面,也就是您所关心的页面的前一个浏览页面/后一个浏览页面。 维度 含义 当前选择页面 您所选择查看其上下游流量的页面。 前一个页面 网站流量浏览当前选择页面前,所浏览的前