我正在通過一個python腳本從'服務器A'中的作業(父作業)觸發'服務器B'中的作業(子作業)。我有2-3個父母工作。所以我想知道哪些父作業觸發了子作業。我怎麼知道哪個父母的工作觸發了小孩的工作?我如何獲得觸發特定工作的項目細節?
我可以將父作業名稱傳遞給子作業名稱嗎? 或 我可以直接從孩子的工作中得到父母的名字嗎? (環境變量/使用python腳本)
我正在通過一個python腳本從'服務器A'中的作業(父作業)觸發'服務器B'中的作業(子作業)。我有2-3個父母工作。所以我想知道哪些父作業觸發了子作業。我怎麼知道哪個父母的工作觸發了小孩的工作?我如何獲得觸發特定工作的項目細節?
我可以將父作業名稱傳遞給子作業名稱嗎? 或 我可以直接從孩子的工作中得到父母的名字嗎? (環境變量/使用python腳本)
您可以爲您的子作業使用其他參數。
每個版本都有一個環境變量JOB_NAME。您可以將其作爲字符串參數傳遞給您的子作業。在/env-vars.html提供
如下描述:
JOB_NAME
此版本的項目名稱,如 「富」 或 「富/酒吧」。 (要剝離Bourne shell腳本中的文件夾路徑,請嘗試:$ {JOB_NAME ## * /})
將作業名稱作爲環境變量傳遞,如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看看我是如何做到的。