【问题标题】:TeamCity :: How can I access teamcity build ID in JavaTeamCity :: 我如何在 Java 中访问 teamcity 构建 ID
【发布时间】:2017-02-12 04:34:26
【问题描述】:

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.teamcity.auth.userId),但我不知道如何使用 Java 访问这些参数。我想读取 teamCity.build.id jusy 的值,就像我们可以读取 How to fetch the Value of Teamcity Configuration in java? 中提到的环境变量名称一样

【问题讨论】:

  • 您是从 TeamCity 插件内部执行代码吗?
  • Java 类文件中的上述代码。如果 java 项目通过 TC 构建步骤之一运行,则执行上面的行并给出当前构建号。
  • 构建 ID 不作为环境变量公开。您是否检查过包含 URL 的任何其他方式是否足够好——confluence.jetbrains.com/display/TCD10/…
  • Hay @Jayan。你分享的链接对我有用。我很乐意与您分享赏金。您能否将您的评论作为答案。我会接受的..

标签: java selenium continuous-integration teamcity bamboo


【解决方案1】:

您是否正在使用构建运行程序执行 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 的信息来专门回答这个问题)

【讨论】:

  • 嗨。我不想事先设置变量,而是想在执行期间读取它的值
  • 是的,但是在执行期间呢?构建,或者当您运行从该构建构建的 jar 时?
  • 这里我指的是build的执行。谢谢。
  • 那我已经回答了你的问题,它可以在你的构建运行器中使用我展示的代码
  • 来自 maven 我不想将 system.teamcity.build.id 作为参数传递。相反,system.teamcity.build.id 是 TeamCity 中存在的系统参数。我想读取这个值,因为它在工件的 URL 中是需要的,并且这个值会随着每次构建而变化。我真的很感谢你的帮助,如果我得到我需要的答案,我很乐意给予赏金。
【解决方案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

在运行时访问 build Id 可能很困难(这就是这个问题的原因),但我们也可以使用 Build Number 来访问工件

/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");

【讨论】:

    【解决方案3】:

    是的,但是您可以创建值为“%system.teamcity.buildType.id%”的环境变量并在构建中读取它。之后,您可以执行以下 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 中这可能更容易。

    【讨论】:

    • 嗨。我不想事先设置变量,而是想在执行期间读取它的值
    【解决方案4】:

    到 TeamCity 构建的链接可以使用构建号而不是 buildID。但是,它也需要 buildTypeId(可以在构建配置页面 URL 中看到)。

    此类链接的示例是:

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

    希望这对某人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多