【问题标题】:Why did my TeamCity build stop working?为什么我的 TeamCity 构建停止工作?
【发布时间】:2023-06-05 17:46:01
【问题描述】:

我有一个 TeamCity 构建配置,直到最近它一直运行良好。突然,有一个构建卡在队列中,说它与任何代理都不兼容。给出的理由是:

隐式要求:参数中定义的teamcity.build.branch:BuildFormatSpecification

我的 BuildFormatSpecification 参数是这样定义的:

%MajorVersion%.%MinorVersion%.%PatchVersion%-%teamcity.build.branch%

这又在 Build Number Format 字段中与构建计数器一起使用,如下所示:

%BuildFormatSpecification%.%sharedBuildNumber.id4%

这个想法是构建号像“1.0.0-develop.22”一样出现,并包括正在构建的 Git 分支。这遵循语义版本控制的规则。这个方案在很多项目中都对我有用,但是突然这个构建卡住了,我不知道为什么。

有什么想法吗?

【问题讨论】:

  • 当我的 VSC 根路径(“Pull changes From”)指向物理目录而不是 URL 时,我遇到了这个错误。这适用于物理路径有效的一个代理。所有其他代理在该路径上都没有存储库。删除唯一的工作代理后,其他代理无法检出源,导致 %teamcity.build.branch% 未定义。解决方案是将路径更改为存储库的全局可访问 URL。

标签: git build teamcity teamcity-8.0


【解决方案1】:

teamcity.build.branchpredefined build parameter,但仅在配置了 branch specification 时才定义。因此,要解决您的问题,请确保您的构建步骤配置了 VCS 根目录并添加例如+:refs/heads/(master) 作为您的分支规范。

来自 TeamCity 关于 Agent Requirements 的文档和隐含要求:

对未知参数的任何引用(名称以 % 符号表示)都被视为“隐式要求”。这意味着构建只会在提供指定参数的代理上运行。

否则,应通过在构建配置或项目级别上定义参数来使该参数可用于构建配置。

【讨论】:

  • 另外,Team City 并没有在你修复它后清除问题,你必须删除构建请求并重新添加它。好的。至少,在我正在使用的版本上,这是几个版本。具有讽刺意味的是,如果您设置默认分支(必需),然后将分支规范留空(不应该是必需的,因为他们对它的描述是:“除了默认分支之外要监控的分支” - 这是“无”只是监控默认的。另外,如果你从这里的单行切换到两个完整的规范,你的分支显示的变化从“开发”到 /ref/head/develop'
  • 在描述上浪费了空间,并在构建名称中添加了垃圾 - 并导致我的构建由于名称而失败......不知道如何解决这个问题......
  • 你应该问一个关于分支名称的新问题,但答案是在你想要显示的部分周围使用括号,在我的例子中它将是“master”。见jetbrains.com/help/teamcity/…