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

div*_*scm 14 jenkins jenkins-plugins

执行名为"A"的上游作业.A执行测试用例成功,即下游项目"B".但是当从B发送邮件时,我们必须在邮件中包含上游项目详细信息(上游项目名称,构建号码).因此,我们可以轻松地将测试运行与各自的上游作业进行映射/核心化.

在下游项目仪表板中,显示详细信息.

Started by upstream project Dev_RM_3.0_CI_Test build number 10
originally caused by:
Run Code Online (Sandbox Code Playgroud)

我查了https://wiki.jenkins-ci.org/display/JENKINS/Building+a+software+project.但在下游找不到任何可以继承的东西.

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

echo $BUILD_NUMBER
echo $JOB_NAME
echo $BUILD_ID
Run Code Online (Sandbox Code Playgroud)

但输出是

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
Run Code Online (Sandbox Code Playgroud)
  1. 有什么帮助继承下游工作的上游细节?
  2. 如何获得当前的工作细节?

raz*_*boy 14

例如,您引用问题" Started by upstream project "Chained/1-First"内部版本号34" 的消息可在jenkins Cause中找到.

Jenkins将上游构建信息保留在它的原因对象中.如果您正在使用构建DSL或管道,您可以在groovy中获得它.或者你可以curl找到工作网址并使用它jq来获得原因

例如curl 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/"
  }]
}
Run Code Online (Sandbox Code Playgroud)

或者从管道中例如:

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

您可以从原因中获取大量信息,等待所有脚本批准或全局共享步骤.如果不同的原因触发此构建,例如commit或user,您将获得null.


Dan*_*oto 11

您可以通过构建参数将上游变量传递给下游作业,然后您可以使用$ {MyParameter1}和$ {MyParameter2}等内容访问它们(在下游作业中).

你需要:

  1. 将构建参数添加到下游作业.例如,名为"ParentJobName"的字符串参数.
  2. 在上游作业中添加后期构建"在其他项目上触发下游参数化构建".
  3. 在#2中添加"当前构建参数"或"预定义参数"之类的内容,并传入您需要的任何内容.例如: ParentJobName=${JOB_NAME}
  4. 像访问其他构建变量一样访问参数.例如$ {ParentJobName}

你应该能够传递基本的东西.任何比这更复杂的东西,你最好使用像Copy Artifacts Plugin这样的插件来复制文件或在系统groovy步骤中使用Jenkins API来获取/修改上游构建等.