3

我知道BUILD_NUMBER環境變量;然而,除非我錯了,這是一個全球變量,似乎在所有項目之間共享。這是一個問題,因爲如果我有兩個代理運行作業,一個腳本可能會嘗試在另一個腳本更新其不同項目後使用當前項目的內部版本號。我如何知道詹金斯當前項目的內部版本號?

下面是一個例子情形:

  • 工作Ĵ 1周開始,執行一些腳本小號BUILD_NUMBER目前,比方說,500
  • 有人手動啓動工作Ĵ,現在設置BUILD_NUMBER到完全不同的東西,比方說,750
  • 腳本小號,它仍然在運行,現在達到實際使用的點BUILD_NUMBER,現在設置爲750(作業不可能的值爲J,它只能達到500)。

我在這個理解中正確嗎?如果是這樣,我該如何解決這個問題?

+1

我相當肯定你的理解是不正確的。你爲什麼不設置兩個工作,睡覺一會兒,然後打印出BUILD_NUMBER,只是爲了親眼看看? –

+0

@Jack Leow:但那正是我所做的!這很奇怪。我想我必須尋求不同的解釋。 –

回答

8

BUILD_NUMBER不是全局性的系統。每個工作都是本地的。在您的示例中,J1和J2將具有不同的BUILD_NUMBER(J1 = 500,J2-750)值,並且在作業期間它們將保持不變 - 在作業內。

+0

我希望你是對的;然而,如果是這樣的話,我很難理解我能看到我看到的東西(即J1內運行的腳本使用'BUILD_NUMBER' 671產生的輸出,儘管J1的內部版本數量只增加到了305 ...同時,* J2 *的最新內部版本號爲671)。我想還有一些其他的解釋。任何想法可能是什麼? –

+0

我確定 - 至少對於詹金斯來說是最新的。我們在我們的幾項工作中使用BUILD_NUMBER,並始終正確設置。一種驗證方法 - 插入「執行Windows批處理命令」並讓命令剛剛「設置」。這會將變量轉儲到控制檯,您可以看到這些值是什麼。請注意,插件可能會不同地或在BUILD_NUMBER未正確評估的上下文中執行其代碼和參數解析。 –

+0

但是你的工作是否平行運行,還是一個接一個地運行? –

4

你可以得到最新(已完成或正在執行)建立與數:
http://[JENKINS_URL]/job/[JOB_NAME]/lastBuild/buildNumber
或從工作本身中,你可以使用環境變量:
${BUILD_NUMBER}

您可以使用所有其他固定鏈接太多,如:
/lastStableBuild/
/lastSuccessfulBuild/
/lastFailedBuild/
等。

除非你是一個插件,例如Next Build Number自定義版本號,你的下一個構建數將永遠是一個增量最新版本號。

內部編號爲每個作業。它們不是全球性的環境變量。
每次執行任何作業時,它將拷貝/繼承現有環境變量到新會話。Jenkins/Hudson然後將所有工作參數和額外變量(包括${BUILD_NUMBER})添加到新會話中。它們僅在該會話期間(即在作業運行期間)作爲環境變量提供。一旦作業完成,這個會話將被銷燬(以及爲會話生成的所有額外變量)。

不能訪問環境要從另一個任務運行/會話一個作業運行/會話變量。您可以使用通過我提供的URL方法訪問另一個作業的/lastBuild/buildNumber。您也可以通過相同的方式訪問/lastBuild/buildTimestamp

要訪問作業參數高就,你可以使用:
http://[JENKINS_URL]/job/[JOB_NAME]/lastBuild/api/json

http://[JENKINS_URL]/job/[JOB_NAME]/lastBuild/api/xml
但你需要解析輸出,你需要什麼。