首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获取触发了具体任务的项目详细信息?

如何获取触发了具体任务的项目详细信息?
EN

Stack Overflow用户
提问于 2016-05-12 17:07:29
回答 4查看 5.1K关注 0票数 5

我正在通过python脚本从'Server A‘中的作业(父作业)触发'Server B’中的作业(子作业)。我有2-3份家长工作。所以我想知道哪个父作业是子作业触发的。如何知道哪个父作业触发子作业?

是否可以将父作业名称传递给子作业名称?或者我可以直接从子作业中获取父名称?(环境变量/使用python脚本)

EN

回答 4

Stack Overflow用户

发布于 2016-05-12 18:30:47

每个构建都有一个环境变量JOB_NAME。您可以将其作为字符串参数传递给子作业。

/env-vars.html中提供了以下描述:

JOB_NAME

此生成的项目名称,例如"foo“或"foo/bar”。(要从Bourne shell脚本中剥离文件夹路径,请尝试:${JOB_NAME##*/})

票数 5
EN

Stack Overflow用户

发布于 2016-05-12 20:37:49

像OltzU提到的那样,将作业名作为环境变量传递可能是可行的,但这取决于您如何触发子作业。如果您使用构建后步骤直接从父作业触发子作业,则可以使用类似于Parameterized Remote Build插件的东西来传递作业名称。如果使用父作业中的脚本启动子作业,则可以将作业名称作为参数字符串。

如果不能将触发作业作为参数传递,则可以使用Groovy以编程方式获取构建触发器。Groovy是唯一一种与Jenkins api完全集成的语言,所以如果你想使用另一种语言(python),你只能使用rest api或jenkins cli,这两种语言给你的功能都是有限的(例如,据我所知,这两种语言都不能给你触发任务)。

如果希望使用groovy获取触发器作业,则需要Groovy Plugin,它将作为子作业中的构建步骤运行。下面是获取触发构建的上游作业链的代码片段。您可能需要根据使用的触发器类型修改代码。

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2020-10-14 06:29:55

在子Jenkinsfile中,此Groovy代码将获得触发作业的名称:

代码语言:javascript
复制
String getTriggeringProjectName() {
    if (currentBuild.upstreamBuilds) {
        return currentBuild.upstreamBuilds[0].projectName
    } else {
        return ""
    }
}

currentBuild.upstreamBuildsRunWrapper对象的列表

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37182219

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档