2017-10-09 30 views
11

我正在使用TeamCity 2017.1.4以及GitVersion。Teamcity触发器在没有新提交的情况下建立在新分支上

teamcity项目本身由许多构建配置组成,其中第一个运行GitVersion,然后所有后续步骤对此步骤执行快照依赖关系并从其参数中提取版本。

在大多数情况下,这个工程很好,但是如果我们创建一个新的分支,例如。/release-foo并推送它,teamcity将不会触发构建,因为它之前已经构建了commit sha,不幸的是我们需要它再次触发,因为即使提交没有改变,在新分支中意味着它会得到一个不同的GitVersion编号。

我试着强制GitVersion构建配置上的快照依赖关系始终被重建,但是这看起来有点丑陋,因为这种方式打破了所有其他场景,这不是问题。我也知道我可以手动触发构建告诉它重建所有的依赖关系,它会工作,但是我很好奇,如果有一个更好的方法来让teamcity自动触发构建一个分支上的提交,如果该分支没有以前存在,或者事实上我可以用任何其他方式来处理这个问题

+0

我不同意这个说法,“即使提交没有改变在新的分支意味着它会得到不同的GitVersion编号”。如果您在基于特定提交的Git中创建新分支,那么新分支将使用旧的提交#并且没有新分支。这是Git知道特定分支所在的唯一途径。 – Nishit

+0

我不是指git commit sha,而是GitVersion应用程序生成的GitVersion编号 –

+0

经过多一点研究,似乎这可能是teamcity中的一个错误,或者至少在某种程度上与设置有关teamcity.buildRevisions.detectUnknownCommitMerge = true teamcity.vcsTrigger.runBuildOnSameRevisionInEveryBranch = true –

回答

1

您可以尝试配置TeamCity以在构建中包含不同/更多GitVersion version variables,包括分支名称和可能的version tags。这将为您的构建过程提供一种方式来区分不同分支上的相同提交。

有关如何在TeamCity中使用其他信息的一些示例,请参阅this CD post的步骤1-5以及detailed blog post on using GitVersionTask

+0

我们已经这样做了,问题是teamcity只考虑了sha,并且自从它已经构建它以后,它不会重新生成它以生成新的版本号 –

+0

@DanielPowell嗯......也许你可以使用REST API [从特定更改触发](https://teamcity-support.jetbrains.com/hc/en-us/community/posts/206166489-How-do-I-trigger-a-build-for- a-specific-git-commit-via-Teamcity-REST-API-)(vs特定的提交)? – brichins

1

你可以通过从git钩子触发构建来实现这一点。

正如所解释的here,您可以使用该update挂钩,以确定推分支(甚至几时在一次操作都推)和每个分支(假设它通过您的触发规则)使用REST API引发的TeamCity构建。

1

如果您只是在不修改任何内容的情况下修改新分支上的提交,它将因为时间戳更改而获得新的散列。我不认为这是一个很好的解决方案,但是imho比手动触发更好。

+1

修改提交需要重写历史记录,并且推送该上游文件需要不受保护的分支。我会**强烈**建议,以避免这样做 – Amit

+0

是的,我不喜欢这个,它需要每个人都知道并记得这样做 –

+0

@Amit,它是关于一个新的分支,没有什么邪恶的历史重写。 –

相关问题