Teamcity 如何在新分支上触发构建,而无需新提交?

12

我正在使用TeamCity 2017.1.4以及GitVersion。

TeamCity 项目本身由许多构建配置组成,第一个配置是运行 GitVersion,然后所有后续步骤都将依赖于此步骤的快照依赖并从其参数中获取版本。

在大多数情况下,这很好用;但是,如果我们创建一个新的分支例如 /release-foo 并推送它,TeamCity 将不会触发构建,因为它已经先前构建了提交 sha,不幸的是,即使提交没有更改,因为在新分支中,它将得到一个不同的 GitVersion 号码,所以我们需要它再次触发构建。

我尝试强制对 GitVersion 构建配置的快照依赖项始终重新构建,但这似乎有点丑陋,因为这可能会破坏其他场景。我也知道我可以手动触发构建,并告诉它重新构建所有依赖项,它会工作,但是我很想知道是否有一种更好的方法来让 TeamCity 自动触发在分支上的提交时进行构建,如果该分支之前不存在,或者我还能采用其他方法来解决这个问题。


我不同意“即使提交记录没有更改,但在一个新的分支中,它将得到一个不同的GitVersion号码”的说法。如果在Git上创建一个基于某个提交记录的新分支,则新分支将使用旧的提交编号,而不会有新的提交编号。这是Git知道特定分支基于何处的唯一方法。 - Nishit
我指的不是 Git 提交 SHA,而是由 GitVersion 应用程序生成的 GitVersion 号码。 - Daniel Powell
经过更深入的研究,似乎这可能是TeamCity中的一个错误,或者至少与设置teamcity.buildRevisions.detectUnknownCommitMerge=true有关。teamcity.vcsTrigger.runBuildOnSameRevisionInEveryBranch=true - Daniel Powell
3个回答

1
你可以通过从git hook触发构建来实现这一点。
此处所述,您可以使用update钩子来识别推送的分支(即使在单个操作中推送了多个分支),并且对于每个分支(假设它通过了您的触发规则),使用REST API触发TeamCity构建。

1

{btsdaf} - Daniel Powell
{btsdaf} - brichins

0
如果您只是在新分支上对提交进行简单的修改而不做任何修改,由于时间戳的更改,它将得到一个新的哈希值。我认为这不是一个好的解决方案,但在我看来比手动触发要好。

1
修改提交需要重写历史记录,并将其推送到上游需要取消保护分支。我强烈建议避免这样做。 - Amit
是的,我不喜欢这个,而且它需要每个人都知道并记得去做。 - Daniel Powell
@Amit,这是关于一个新分支的事情,没有恶意历史重写。 - Szigyártó Mihály
@SzigyártóMihály - 在这种情况下,您建议创建一个新的提交(并保留现有的提交)- 我宁愿在“源”提交之上创建一个新的提交,然后像修正一样在其父级上进行操作...但总的来说,我想这是一个有效的解决方案。 - Amit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接