如何在 TeamCity 中使用动态参数?

How to work with dynamic parameters in TeamCity?

我正在整合 BitBucketTeamCitySonarQube。我的场景如下:

  1. 开发人员开始新的 PR 或更改现有的 PR;
  2. TeamCity 自动开始构建 PR;
  3. TeamCity posts 通过 SonarQube Runner-Dsonar.branch.name=%teamcity.build.branch%;
  4. 将分析结果发送到 SonarQube
  5. BitBucket通过分支名称向SonarQube请求分析详情并显示在PR页面上。

所以问题是我无法推断出 PR 所基于的分支的名称。这是发生的事情:

  1. 我配置TeamCity监听VCS分支规范中的+:refs/pull-requests/*/from引用;
  2. TeamCity 发现新的 PR 时,它会开始构建
  3. 分支的名称 (teamcity.build.branch) 等于 PR 的编号(因为引用中有星号);
  4. BitBucket 无法通过 PR 的分支名称检索分析详细信息,因为它们存储在 SonarQube 中,名称等于 PR 的编号而不是分支名称.

方案一(动态参数):

  1. 定义某种动态参数;
  2. 在其中一个构建步骤中为参数赋值;
  3. 使用该值 post 分析结果 SonarQube

解决方案 2:

  1. 收听两个参考文献:+:refs/pull-requests/*/from+:refs/heads/*
  2. 设置一个只监听 +:refs/heads/*VCS 触发器;
  3. 如果未找到当前分支的拉取请求引用,则在第一个构建步骤中使构建失败。

这似乎不是一个好的解决方案。

所以在我看来,解决方案应该是这样的:

  1. 让 TeamCity 在找到新 PR 时触发构建(现在的工作方式);
  2. 使其找出正确的分支名称(通过提交哈希)并将其存储在动态参数中;
  3. 把这个参数的值传给SonarQubeRunner(-Dsonar.branch.name=%dynamic.branch...%)

我阅读了 documentation about TeamCity predefined branch parameters,但没有找到任何有用的信息。

请帮我弄清楚如何配置它。

通过在构建脚本中使用专用服务消息,您可以从构建步骤动态更新构建的构建参数(需要在构建配置的参数部分定义参数)。

Build Script Interaction with TeamCity

echo ##teamcity[setParameter name='ddd' value='fff']

P.S。 echo 是必须的

配置参数(无前缀)

 Write-Host "##teamcity[setParameter name='ParameterName' value='NewValue']"

环境变量(由 env. 前缀定义)

 Write-Host "##teamcity[setParameter name='env.ParameterName' value='NewValue']"

系统属性(由system.前缀定义)

 Write-Host "##teamcity[setParameter name='system.ParameterName' value='NewValue']"

例如

  1. 参数应该在构建的参数部分可用

  2. 添加“Write-Host”更新参数值