2016-05-12 73 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看看我是如何做到的。