2016-05-12 71 views
2

我正在通过一个python脚本从'服务器A'中的作业(父作业)触发'服务器B'中的作业(子作业)。我有2-3个父母工作。所以我想知道哪些父作业触发了子作业。我怎么知道哪个父母的工作触发了小孩的工作?我如何获得触发特定工作的项目细节?

我可以将父作业名称传递给子作业名称吗? 或 我可以直接从孩子的工作中得到父母的名字吗? (环境变量/使用python脚本)

回答

0

您可以为您的子作业使用其他参数。

4

每个版本都有一个环境变量JOB_NAME。您可以将其作为字符串参数传递给您的子作业。在/env-vars.html提供

如下描述:

JOB_NAME

此版本的项目名称,如 “富” 或 “富/酒吧”。 (要剥离Bourne shell脚本中的文件夹路径,请尝试:$ {JOB_NAME ## * /})

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脚本触发任务,你将需要使用常规设置触发工作中的环境变量。这SO thread给出了更多的信息,或者你可以跳到my answer in that thread看看我是如何做到的。