2016-10-04 49 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

希望这可以帮助别人。