【发布时间】:2021-07-13 14:35:09
【问题描述】:
我正在整合BitBucket、TeamCity 和SonarQube。我的场景如下:
- 开发人员启动新 PR 或更改现有 PR;
-
TeamCity开始自动构建 PR; -
TeamCity将分析结果通过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 的编号,而不是分支的名称。
方案一(动态参数):
- 定义某种动态参数;
- 在其中一个构建步骤中为参数赋值;
- 使用该值将分析结果发布到
SonarQube。
解决方案 2:
- 收听两个参考:
+:refs/pull-requests/*/from和+:refs/heads/*; - 设置一个只监听
+:refs/heads/*的VCS触发器; - 如果未找到当前分支的拉取请求引用,则在第一个构建步骤中使构建失败。
这似乎不是一个好的解决方案。
所以在我看来,解决方案应该是这样的:
- 让 TeamCity 在找到新 PR 时触发构建(现在的工作方式);
- 使其找出正确的分支名称(通过提交哈希)并将其存储在动态参数中;
- 将此参数的值传递给
SonarQubeRunner (-Dsonar.branch.name=%dynamic.branch...%)
我阅读了documentation about TeamCity predefined branch parameters,但没有发现任何有用的信息。
请帮我弄清楚如何配置它。
【问题讨论】:
-
“这是不可能实现的,因为TeamCity不提供动态参数”不正确
-
@SeniorPomidor,请分享链接,我自己找不到。
-
您可以使用Build Script Interaction with TeamCity动态创建\更改新参数
-
@SeniorPomidor,谢谢你给我看,我从来没有遇到过。这正是我所需要的。请发布答案,我会接受。
标签: git sonarqube bitbucket teamcity