【问题标题】:Wait for VCS labeling to finish before starting the next build in TeamCity chain等待 VCS 标记完成,然后再开始 TeamCity 链中的下一个构建
【发布时间】:2020-06-05 21:58:42
【问题描述】:

假设我的 TeamCity 构建链中有两个构建,都使用相同的 VCS 根。 2nd 构建在 1st 完成后开始(2nd1st 有快照依赖)。

1st 构建使用VSC labeling 构建功能,并在构建完成后将新标签添加到 Git 存储库。

我遇到的问题是 2nd 构建没有得到这个新标签。例如,如果我在 2nd 构建的第一步中运行git describe,它将返回“上一个”标签值。我相信,这种“滞后”的原因是根据 TeamCity 文档:

[标签]过程在构建完成后在后台进行

因此,当 2nd 构建执行 VCS 检出时,Git 存储库还没有新标签(因为它正在后台应用,显然是在 2nd 构建开始),因此对于 2nd 构建,“上一个”标签实际上是可用的最新标签。

有没有办法只在 VCS 标记完成后运行 2nd 构建?

我可以考虑添加一个带有一些超时的虚拟步骤,以确保标记过程有足够的时间完成,然后才运行 2nd 构建,但这看起来像一个丑陋的拐杖。

【问题讨论】:

  • 您对这个 repo 的投票时间是怎样的?您可以在管理 > 诊断 > VCS 状态中查看
  • 2nd 构建在 1st 成功构建时触发(快照依赖强制修订同步),因此轮询不会在这种情况下无关紧要。
  • 这可能无关紧要,但它可以说明为什么标记时间过长。
  • 不太可能很长,但是自从 2nd 构建和 VCS 标签同时开始(或者可能构建比 VCS 标签更早 ),那么无论如何都为时已晚。

标签: git teamcity


【解决方案1】:

嗯,在我看来这是设计使然,因此不太可能有解决方案。不过真的很可惜,因为使用这个默认功能可以节省一些精力。

所以我决定采用以下解决方法:我不使用 VSC 标记构建功能,而是“手动”在其中一个构建步骤中添加一个新标签,以确保此操作在构建完成之前完成。

为了更清楚,这里是工作流程:

  1. 第一个构建开始
  2. 其中一个构建步骤使用 CLI 和 Git 显式添加新标签。新标签现在在我的 Git 存储库中
  3. 第一个构建完成,触发第二个构建开始
  4. 2nd 构建开始并顺利获取新标签

由于这是一种解决方法,我不会将此答案标记为已接受。

【讨论】:

    猜你喜欢
    • 2020-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-17
    • 2022-10-04
    • 2013-06-15
    • 2012-03-18
    • 1970-01-01
    相关资源
    最近更新 更多