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

时间:2019-04-12 12:01:22

标签: git sonarqube bitbucket teamcity

我正在整合BitBucketTeamCitySonarQube。我的情况如下:

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

所以问题是我无法推断PR所基于的分支的名称。这是发生了什么:

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

解决方案1(动态参数):

  1. 定义某种动态参数;
  2. 在构建步骤之一中为参数分配值;
  3. 使用该值将分析结果发布到SonarQube

解决方案2:

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

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

所以在我看来,解决方案应该类似于:

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

我阅读了documentation about TeamCity predefined branch parameters,但没有发现任何帮助。

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

2 个答案:

答案 0 :(得分:1)

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

Build Script Interaction with TeamCity

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

P.S。 echo是强制性的

答案 1 :(得分:0)

配置参数(无前缀)

 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. 参数应该在构建的参数部分可用 parameter should be available in parameters section of build

  2. 添加“Write-Host”更新参数值 enter image description here