我在服务器B'中触发了一份工作(儿童工作)。来自服务器A'中的工作(父工作)通过python脚本。我有2-3个父工作。所以我想知道哪个父作业被触发了这个子作业。我怎么知道哪个父母工作触发了孩子的工作?
我可以将父作业名称传递给子作业名称吗? 要么 我可以直接从子工作中获取父母姓名吗? (环境变量/使用python脚本)
答案 0 :(得分:4)
每个版本都有一个环境变量 JOB_NAME 。您可以将此作为字符串参数传递给子作业。
以下说明在/env-vars.html中提供:
<强> JOB_NAME 强>
此构建的项目名称,例如“foo”或“foo / bar”。 (要从Bourne shell脚本中删除文件夹路径,请尝试:$ {JOB_NAME ## * /}}
答案 1 :(得分:2)
将作业名称作为OltzU提及的环境变量传递,可能是要走的路,但这取决于您如何触发子作业。如果使用构建后步骤直接从父作业触发子作业,则可以使用Parameterized Remote Build插件之类的内容来传递作业名称。如果您在父作业中使用脚本来触发子作业,则可以将作业名称作为参数字符串。
如果无法将触发作业作为参数传递,则可以使用Groovy以编程方式获取构建触发器。 Groovy实际上是唯一与Jenkins api完全集成的语言,所以如果你想使用另一种语言(python),你就会被使用剩下的api或jenkins cli所困扰,这些都受限于他们可以给你的东西(例如根据我的知识,两者都不能给你带来触发工作。)
如果您想使用groovy来获取触发器作业,则需要Groovy Plugin,您将在子作业中作为构建步骤运行。这是一段代码,用于获取触发构建的上游作业链。您可能需要根据所使用的触发器类型修改代码。
def getUpstreamProjectTriggers(causes) {
def upstreamCauses = []
for (cause in causes) {
if (cause.class.toString().contains("UpstreamCause")) {
upstreamCauses.add(cause.getUpstreamProject())
}
}
return upstreamCauses
}
getUpstreamProjectTriggers(build.getCauses())
从这里开始,如果你想在python脚本中使用触发作业,你需要使用groovy在环境变量中设置触发作业。这个SO thread提供了更多相关信息,或者您可以跳到my answer in that thread查看我是如何做到的。
答案 2 :(得分:0)
您可以为子作业使用其他参数。
答案 3 :(得分:0)
在子 Jenkinsfile 中,此Groovy代码将获取触发作业的名称:
String getTriggeringProjectName() {
if (currentBuild.upstreamBuilds) {
return currentBuild.upstreamBuilds[0].projectName
} else {
return ""
}
}
currentBuild.upstreamBuilds
是RunWrapper个对象的列表