如何在 TeamCity 中使用动态参数?
How to work with dynamic parameters in TeamCity?
我正在整合 BitBucket
、TeamCity
和 SonarQube
。我的场景如下:
- 开发人员开始新的 PR 或更改现有的 PR;
TeamCity
自动开始构建 PR;
TeamCity
posts 通过 SonarQube Runner 和 -Dsonar.branch.name=%teamcity.build.branch%
; 将分析结果发送到 SonarQube
BitBucket
通过分支名称向SonarQube
请求分析详情并显示在PR页面上。
所以问题是我无法推断出 PR 所基于的分支的名称。这是发生的事情:
- 我配置
TeamCity
监听VCS
分支规范中的+:refs/pull-requests/*/from
引用;
- 当
TeamCity
发现新的 PR 时,它会开始构建
- 分支的名称 (
teamcity.build.branch
) 等于 PR 的编号(因为引用中有星号);
BitBucket
无法通过 PR 的分支名称检索分析详细信息,因为它们存储在 SonarQube
中,名称等于 PR 的编号而不是分支名称.
方案一(动态参数):
- 定义某种动态参数;
- 在其中一个构建步骤中为参数赋值;
- 使用该值 post 分析结果
SonarQube
。
解决方案 2:
- 收听两个参考文献:
+:refs/pull-requests/*/from
和 +:refs/heads/*
;
- 设置一个只监听
+:refs/heads/*
的 VCS
触发器;
- 如果未找到当前分支的拉取请求引用,则在第一个构建步骤中使构建失败。
这似乎不是一个好的解决方案。
所以在我看来,解决方案应该是这样的:
- 让 TeamCity 在找到新 PR 时触发构建(现在的工作方式);
- 使其找出正确的分支名称(通过提交哈希)并将其存储在动态参数中;
- 把这个参数的值传给
SonarQube
Runner(-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']"
例如
参数应该在构建的参数部分可用
添加“Write-Host”更新参数值
我正在整合 BitBucket
、TeamCity
和 SonarQube
。我的场景如下:
- 开发人员开始新的 PR 或更改现有的 PR;
TeamCity
自动开始构建 PR;TeamCity
posts 通过 SonarQube Runner 和-Dsonar.branch.name=%teamcity.build.branch%
; 将分析结果发送到 BitBucket
通过分支名称向SonarQube
请求分析详情并显示在PR页面上。
SonarQube
所以问题是我无法推断出 PR 所基于的分支的名称。这是发生的事情:
- 我配置
TeamCity
监听VCS
分支规范中的+:refs/pull-requests/*/from
引用; - 当
TeamCity
发现新的 PR 时,它会开始构建 - 分支的名称 (
teamcity.build.branch
) 等于 PR 的编号(因为引用中有星号); BitBucket
无法通过 PR 的分支名称检索分析详细信息,因为它们存储在SonarQube
中,名称等于 PR 的编号而不是分支名称.
方案一(动态参数):
- 定义某种动态参数;
- 在其中一个构建步骤中为参数赋值;
- 使用该值 post 分析结果
SonarQube
。
解决方案 2:
- 收听两个参考文献:
+:refs/pull-requests/*/from
和+:refs/heads/*
; - 设置一个只监听
+:refs/heads/*
的VCS
触发器; - 如果未找到当前分支的拉取请求引用,则在第一个构建步骤中使构建失败。
这似乎不是一个好的解决方案。
所以在我看来,解决方案应该是这样的:
- 让 TeamCity 在找到新 PR 时触发构建(现在的工作方式);
- 使其找出正确的分支名称(通过提交哈希)并将其存储在动态参数中;
- 把这个参数的值传给
SonarQube
Runner(-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']"
例如
参数应该在构建的参数部分可用
添加“Write-Host”更新参数值