2016-10-04 51 views
14

Teamcity生成ID(與BUILD_NUMBER不同)用於各種URL。我想送構建的文物的有路徑的電子郵件/概述等TeamCity ::如何在Java中訪問teamcity生成ID

在Java中,我們可以得到當前運行TeamCity的版本號如下:

String tc_BuildNumber = System.getenv("BUILD_NUMBER"); 

這是因爲TC即提供一個環境變量BUILD_NUMBER。 但不幸的是,沒有與BUILD_ID對應的環境變量。

TeamCity確實提供配置參數(如teamcity.build.id)和系統屬性(如system.teamcity.auth.userId),但我不知道如何使用Java訪問這些參數。我想讀取teamCity.build.id jusy的值,就像我們可以讀取How to fetch the Value of Teamcity Configuration in java?中提到的環境變量名稱

+0

你是否從TeamCity插件執行你的代碼? – Sergi

+0

上面的代碼在Java類文件中。如果Java項目通過TC構建步驟之一運行,則上面的行將被執行,並提供當前的內部版本號。 – san1deep2set3hi

+1

構建ID不作爲環境變量公開。你有沒有檢查包括URL在內的其他方式是否夠用 - https://confluence.jetbrains.com/display/TCD10/Patterns+For+Accessing+Build+Artifacts – Jayan

回答

0

是的,但是您可以創建帶有值「%system.teamcity.buildType.id%」的env var並讀取它在建立。之後,你可以做一個API請求,如:

$APIURL = "${API_BaseUrl}/httpAuth/app/rest/builds/?locator=buildType:${API_BuildType},state:running,count:1" 

$APIXML = (Invoke-RestMethod -Headers $API_CredentialsHeader -Credential $API_Credentials -Uri $APIURL -Method GET -ContentType "application/xml" -TimeoutSec 20) 
# Here you build id. 
$APIXML.builds.build.id 

這是PS示例。但想法是一樣的。在Java中可能更容易。

+0

嗨。我不想事先設置變量,而是想在執行期間讀取其值。 – san1deep2set3hi

5

您是否正在使用build runner執行java代碼?

如果是這樣,那麼你應該能夠將%system.teamcity.build.id%傳遞給跑步者,並將其提供給你的代碼。

即如果你使用命令行亞軍

java -Dbuild_id=%system.teamcity.build.id% 

然後你就可以作爲系統參數訪問

或者,如果你使用gradle這個,你可以這樣做

if (project.hasProperty("teamcity")) { 
    version = project.teamcity["teamcity.build.id"] 
} 

並將'版本'傳遞給java命令行。

Maven中,你可以使用訪問:

${teamcity.build.id} 

在你的pom.xml

(我可以跟你是如何運行的Java具體回答這一點的詳細信息辦)

+0

嗨。我不想事先設置變量,而是想在執行期間讀取它的值 – san1deep2set3hi

+0

是的,但在執行什麼?構建,或者當你運行從該構建構建的jar時? –

+0

這裏我指的是構建的執行。謝謝。 – san1deep2set3hi

0

我注意到很多人都想知道這個問題的答案。 幸運的是,在@Jayan的評論幫助下,我能夠解決我確切的問題,那就是如何獲取構建工件的URL。

如鏈接https://confluence.jetbrains.com/display/TCD10/Patterns+For+Accessing+Build+Artifacts提到的,默認情況下,TeamCity的使用內部版本號爲可以用來訪問構建工件的路徑:

/repository/download/BUILD_TYPE_EXT_ID/BUILD_ID:id/ARTIFACT_PATH 

訪問建立ID可以在運行時很困難(這是這個問題的原因),但我們也可以使用版本號來訪問文物

/repository/download/BUILD_TYPE_EXT_ID/BUILD_NUMBER/ARTIFACT_PATH 

,如圖所示在我的問題版本號可以作爲

訪問10
String BUILD_NUMBER= System.getenv("BUILD_NUMBER"); 

String BUILD_TYPE_EXT_ID = System.getenv("TEAMCITY_BUILDCONF_NAME"); 
0

一個鏈接到一個TeamCity的構建可以使用版本號,而不是buildID。但是,它也需要buildTypeId(可以在構建配置頁面URL中看到)。

等環節的樣品是:

https://buildserver/viewLog.html?buildTypeId=Project_Trunk&buildNumber=46523

希望這可以幫助別人。