在构建失败的情况下跳过TeamCity步骤

6
根据我对TeamCity工作方式的观察,我注意到构建失败条件是在所有步骤执行完成后进行评估的。这非常令人烦恼,因为如果任何构建失败条件被满足,我就不能有一个不执行的步骤。
我指的不是常见的构建失败条件,比如“至少有一个测试失败”。我指的是手动添加的失败条件,例如在度量标准更改时。
当我检查构建日志时,我清楚地看到所有步骤都已执行,只有在最后才评估构建失败条件,并记录任何错误。但这太晚了,因为有条件的步骤(根据“仅在构建状态成功时执行”)已经执行了。
问题:我该怎么做才能实现这一点?
正如您从上面所看到的,我已经尝试添加了构建失败条件的有条件步骤,但未能实现所需结果。
为了更清楚地表达,我有一个部署应用程序的步骤。然而,我的期望是如果满足构建失败条件,则不应进行部署。我拥有的构建失败条件示例是度量标准更改。显然,我可以将其表达为构建失败条件,并且我可以有构建步骤,在构建状态不成功的情况下失败。然而,似乎构建步骤不会按照我所期望的方式行事,因此我感到困惑(我认为这是构建步骤条件的目的)。我漏掉了什么?
3个回答

1
构建和部署的“构建配置”应该分开。
如果构建“构建配置”成功完成(未激活故障条件),则会触发部署“构建配置”的运行。

这就是我最终做的事情。然而,这并没有回答问题。我所指的状态是步骤的状态,下一步的条件设置为仅在前一步成功时继续。有些事情不对劲。这就是我的担忧 - 关于步骤,而不是关于构建配置。 - Tengiz

1
最近版本的TeamCity有一个“执行步骤”的选项,带有“仅在构建状态成功时” - 这个选项应该考虑服务器上的构建失败条件。

0

这是因为在所有构建步骤完成后才会检查构建失败条件。这是有道理的,因为对于像度量变化这样的条件,您应该等待构建完成,我的意思是在构建完成之前,您不能考虑计算工件大小或在日志中查找特定文本或类似的内容。

话虽如此 - 对于您的情况,您应该考虑编写在失败时退出具有非零退出代码的构建步骤,然后您可以在构建步骤执行步骤选项中使用如果所有先前的步骤都成功完成选项。


那么,您建议在满足构建失败条件的情况下,使用单元测试步骤应该以非零代码退出?但是我如何告诉步骤根据构建失败条件返回非零代码呢? - Tengiz
不基于构建失败条件 - 如果您正在运行单元测试并且单元测试失败,则运行单元测试的步骤应返回非零退出代码。可能有关如何运行单元测试的更多信息将会有所帮助。例如,如果您使用TeamCity NUnit插件来运行NUnit测试,则如果测试失败,它会以非零退出代码退出。 - Mohammad Nadeem
我明白你的意思。但是单元测试没有失败,只有构建失败的条件为真。这意味着:所有的单元测试都通过了,但覆盖率下降了N个百分点。我有一个构建失败的条件,检查覆盖率是否下降,如果下降了,构建将被标记为失败。然而,单元测试并不会失败。在构建结束时,它被标记为失败,所以构建失败的条件运行良好。如果覆盖率下降(也就是构建失败的条件满足),我只需要跳过最后一步(部署)即可。 - Tengiz
1
好的,很抱歉,基于构建失败条件跳过部署是不可能的。您应该尝试将部署作为单独的构建,并设置在成功的持续集成构建上触发它。完成构建触发器是实现这一点的方法。 - Mohammad Nadeem
好的,那么我想知道构建步骤中条件的目的是什么,我们可以说只有在构建状态成功时才执行。这是否意味着前一个构建的状态,而不是当前构建的状态? - Tengiz

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