Build 在构建失败的情况下,需要跳过TeamCity步骤

Build 在构建失败的情况下,需要跳过TeamCity步骤,build,teamcity,teamcity-9.0,Build,Teamcity,Teamcity 9.0,从我对TeamCity如何工作的观察中,我注意到构建失败条件是在所有步骤完成后进行评估的。这是非常恼人的,因为我不能有一个步骤,如果任何构建失败的条件都满足,它将不会执行 我不是指常见的构建失败情况,例如“至少一个测试失败”。我指的是手动添加的故障条件,例如度量值更改 当我检查构建日志时,我清楚地看到所有步骤都已执行,只有在最后它才会评估构建失败条件,并记录相应的错误(如果有)。但是在这个过程中已经太晚了,因为条件步骤(必须基于“仅在构建状态成功时执行”)已经执行 问题:我怎样才能做到这一点 从

从我对TeamCity如何工作的观察中,我注意到构建失败条件是在所有步骤完成后进行评估的。这是非常恼人的,因为我不能有一个步骤,如果任何构建失败的条件都满足,它将不会执行

我不是指常见的构建失败情况,例如“至少一个测试失败”。我指的是手动添加的故障条件,例如度量值更改

当我检查构建日志时,我清楚地看到所有步骤都已执行,只有在最后它才会评估构建失败条件,并记录相应的错误(如果有)。但是在这个过程中已经太晚了,因为条件步骤(必须基于“仅在构建状态成功时执行”)已经执行

问题:我怎样才能做到这一点

从上面可以看到,我已经尝试了一个条件步骤并添加了构建失败条件,但无法达到预期的结果

为清晰起见添加内容


基本上,我有一个部署应用程序的步骤。但是,我的期望是,如果满足构建失败条件,我就不应该部署。我遇到的构建失败条件的例子是度量值更改。显然,这可以表示为构建失败条件,如果构建状态不成功,我可以使构建步骤失败。然而,这似乎不是构建步骤的行为方式,因此我感到困惑(我认为这是构建步骤上条件的目的)。我遗漏了什么?

这是因为在所有构建步骤完成时都会检查构建失败条件。这是有意义的,因为对于度量改变的条件,你应该等待构建完成,我的意思是你不能考虑计算工件大小或者在日志中寻找特定的文本或类似的东西,直到构建完成。

这样说-对于您的情况,您应该考虑编写在失败时以非零退出代码退出的构建步骤,然后可以使用<代码>如果所有以前的步骤都成功完成< <代码> >在<代码>执行步骤 <代码>生成步骤< /代码> .< /p> < p>应该将构建和部署“生成配置”分开。p>


如果生成“生成配置”成功完成(未激活故障条件),则这将触发部署“生成配置”运行。

TeamCity的最新版本有一个选项“执行步骤”和“仅当生成状态成功时”-这个选项也应该考虑服务器上的构建失败条件。

那么,您建议在不满足生成失败条件的情况下,单元测试的步骤应该以非零代码退出吗?但我如何告诉步骤根据构建失败条件返回非零代码?而不是基于构建失败条件-如果您正在运行单元测试,并且单元测试失败,则运行单元测试的步骤应该返回非零退出代码。关于如何运行单元测试的更多信息可能会有所帮助。例如,如果您使用teamcity NUnit插件来运行NUnit测试,那么如果测试失败,它将以非零退出代码退出。但单元测试并没有失败,只有构建失败条件是正确的。这意味着:所有单元测试都通过了,但覆盖率下降了N%。我有一个构建失败条件,检查覆盖率是否下降,如果下降,那么构建将被标记为失败。但是单元测试不会失败。在构建结束时,它被标记为失败,因此构建失败条件可以正常工作。如果覆盖率下降,我只需要跳过最后一步(部署)(意味着是否满足构建失败条件)。好的-我担心不可能基于构建失败条件跳过部署。您应该尝试将部署作为单独的构建,并将其设置为在成功的持续集成构建时触发。完成构建触发器就是这样做的。好吧,那么我想知道构建步骤上的条件的目的是什么,我们可以说只有在构建状态成功时才执行。这是否意味着前一个版本的状态,而不是当前版本?这就是我最终要做的。然而,这并不能回答这个问题。我所指的状态是步骤的状态,仅当上一步成功时,下一步条件设置为继续。有些东西不合情理。这是我所关心的-关于步骤,而不是关于构建配置。