使用 Git 触发 TeamCity 非确定性构建
TeamCity non-deterministic build triggering with Git
我使用 Git流分支策略。我喜欢每个项目有 3 个构建配置:
- 集成 - 从 develop、feature/* 和 hotfix/* 构建,具有分支规范
- +:refs/heads/(开发)
- +:refs/heads/特征/(*)
- +:refs/heads/开发/(*)
- +:res/heads/(修补程序/*)
Beta - 从 beta/* 构建,分支规范
- +:refs/heads/(发布/*)
发布 - 从具有分支规范的 master 构建
- +:refs/heads/(主)
请注意使用括号来设置我的首选分支名称。我有这 3 个构建的原因是因为我使用构建配置名称作为构建名称的一部分,所以例如我得到格式为 1.2.3-Integration.27 的构建,最后的数字“27”是项目范围的共享构建计数器。我还在不同的配置中采取不同的 post-构建操作,例如发布配置执行部署操作。
作为我称之为 'non determinism' 的示例,我刚刚通过拉取请求将一个功能分支合并到开发中。我在我的集成构建配置中得到一个构建,它构建了开发分支。但是后来我也得到了我的其他两个构建配置的构建,即使它们的分支规范中没有任何改变;这绝对不是我想要的,因为我的发布配置,例如,部署的东西。这是一个突出显示有问题的构建的屏幕截图:
更新 - 附加信息
这是 'offending build' 的概述
这是触发器配置
我显然不了解 TeamCity 应该如何与 Git 一起工作。我的印象是构建配置只应该构建符合其分支规范的东西。另外两个从哪里来?为什么当分支规范不包括开发(或 refs/heads/develop)时会触发这些构建?有什么办法可以阻止这种情况发生吗?
我曾尝试在 JetBrains 支持论坛上提出这个问题,但我似乎没有得到任何关注,所以我想我应该联系 Whosebug 社区。
如果您有一个 构建触发器,只要有更改就会触发,您就会遇到这种情况。我的项目中有一个非常相似的设置,我通常在触发器构建部分指定所有分支规范。
我使用 Git流分支策略。我喜欢每个项目有 3 个构建配置:
- 集成 - 从 develop、feature/* 和 hotfix/* 构建,具有分支规范
- +:refs/heads/(开发)
- +:refs/heads/特征/(*)
- +:refs/heads/开发/(*)
- +:res/heads/(修补程序/*)
Beta - 从 beta/* 构建,分支规范
- +:refs/heads/(发布/*)
发布 - 从具有分支规范的 master 构建
- +:refs/heads/(主)
请注意使用括号来设置我的首选分支名称。我有这 3 个构建的原因是因为我使用构建配置名称作为构建名称的一部分,所以例如我得到格式为 1.2.3-Integration.27 的构建,最后的数字“27”是项目范围的共享构建计数器。我还在不同的配置中采取不同的 post-构建操作,例如发布配置执行部署操作。
作为我称之为 'non determinism' 的示例,我刚刚通过拉取请求将一个功能分支合并到开发中。我在我的集成构建配置中得到一个构建,它构建了开发分支。但是后来我也得到了我的其他两个构建配置的构建,即使它们的分支规范中没有任何改变;这绝对不是我想要的,因为我的发布配置,例如,部署的东西。这是一个突出显示有问题的构建的屏幕截图:
更新 - 附加信息
这是 'offending build' 的概述
我显然不了解 TeamCity 应该如何与 Git 一起工作。我的印象是构建配置只应该构建符合其分支规范的东西。另外两个从哪里来?为什么当分支规范不包括开发(或 refs/heads/develop)时会触发这些构建?有什么办法可以阻止这种情况发生吗?
我曾尝试在 JetBrains 支持论坛上提出这个问题,但我似乎没有得到任何关注,所以我想我应该联系 Whosebug 社区。
如果您有一个 构建触发器,只要有更改就会触发,您就会遇到这种情况。我的项目中有一个非常相似的设置,我通常在触发器构建部分指定所有分支规范。