我正在通过python脚本从'Server A‘中的作业(父作业)触发'Server B’中的作业(子作业)。我有2-3份家长工作。所以我想知道哪个父作业是子作业触发的。如何知道哪个父作业触发子作业?
是否可以将父作业名称传递给子作业名称?或者我可以直接从子作业中获取父名称?(环境变量/使用python脚本)
发布于 2016-05-12 18:30:47
每个构建都有一个环境变量JOB_NAME。您可以将其作为字符串参数传递给子作业。
/env-vars.html中提供了以下描述:
JOB_NAME
此生成的项目名称,例如"foo“或"foo/bar”。(要从Bourne shell脚本中剥离文件夹路径,请尝试:${JOB_NAME##*/})
发布于 2016-05-12 20:37:49
像OltzU提到的那样,将作业名作为环境变量传递可能是可行的,但这取决于您如何触发子作业。如果您使用构建后步骤直接从父作业触发子作业,则可以使用类似于Parameterized Remote Build插件的东西来传递作业名称。如果使用父作业中的脚本启动子作业,则可以将作业名称作为参数字符串。
如果不能将触发作业作为参数传递,则可以使用Groovy以编程方式获取构建触发器。Groovy是唯一一种与Jenkins api完全集成的语言,所以如果你想使用另一种语言(python),你只能使用rest 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看看我是如何做到的。
发布于 2020-10-14 06:29:55
在子Jenkinsfile中,此Groovy代码将获得触发作业的名称:
String getTriggeringProjectName() {
if (currentBuild.upstreamBuilds) {
return currentBuild.upstreamBuilds[0].projectName
} else {
return ""
}
}currentBuild.upstreamBuilds是RunWrapper对象的列表
https://stackoverflow.com/questions/37182219
复制相似问题