TeamCity :: 如何在 Java 中访问 teamcity build ID

Teamcity Build ID(与BUILD_NUMBER不同)用于各种URL。我想发送一封电子邮件,其中包含构建工件/概述等的路径。

在Java中,我们可以获得当前正在运行的teamcity内部版本号,如下所示:

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

这是因为 TC 提供了一个环境变量,即 BUILD_NUMBER。但不幸的是,没有对应于BUILD_ID的环境变量。

TeamCity确实提供了配置参数(如 teamcity.build.id)和System属性(如system.teamcity.auth.userId),但我不知道如何使用Java访问它们。我想读取 teamCity.build.id jusy 的值,就像我们可以读取如何在 java 中获取 Teamcity 配置的值中提到的环境变量名称一样?


答案 1

您是否正在使用构建运行器执行 Java 代码?

如果是这样,那么您应该能够将 %system.teamcity.build.id% 传递给运行器,并使其可用于您的代码。

即,如果您使用的是命令行运行器

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

然后,您可以将其作为系统参数进行访问

或者,如果您使用的是gradle,则可以执行类似操作

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

并将“version”传递给 java 命令行。

在 maven 中,您可以使用以下命令访问它:

${teamcity.build.id}

在你的绒球里.xml

(我可以做更多关于你如何运行java的信息来具体回答这个问题)


答案 2

我注意到很多人想知道这个问题的答案。幸运的是,在@Jayan的评论的帮助下,我能够解决我的确切问题,即如何获取构建工件的URL。

如链接 https://confluence.jetbrains.com/display/TCD10/Patterns+For+Accessing+Build+Artifacts 中所述,默认情况下,TeamCity 使用内部构建 ID 作为可用于访问构建工件的路径:

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

在运行时访问构建 ID 可能很困难(这就是此问题的原因),但我们也可以使用内部版本号来访问工件

/repository/download/BUILD_TYPE_EXT_ID/BUILD_NUMBER/ARTIFACT_PATH

如我的问题所示,内部版本号可以作为访问

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

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

推荐