【问题标题】:TeamCity step needs to be skipped on build failure condition在构建失败条件下需要跳过 TeamCity 步骤
【发布时间】:2020-05-21 23:25:42
【问题描述】:

根据我对 TeamCity 工作原理的观察,我注意到在执行完所有步骤后会评估构建失败条件。这很烦人,因为如果满足任何构建失败条件,我就没有一个不会执行的步骤。

我指的不是常见的构建失败条件,例如“至少一个测试失败”。我指的是手动添加的失败条件,例如指标更改。

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

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

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

为清楚起见添加

基本上,我有一个部署应用程序的步骤。但是,我的期望是,如果满足构建失败条件,我不应该部署。我所拥有的构建失败条件的示例是度量更改。显然,这可以表示为构建失败条件,并且我可以在构建状态不成功的情况下使构建步骤失败。但是,这似乎不是构建步骤的行为方式,所以我很困惑(我认为这是构建步骤条件的目的)。我错过了什么?

【问题讨论】:

    标签: build teamcity teamcity-9.0


    【解决方案1】:

    构建和部署“构建配置”应该分开。

    如果构建“构建配置”成功完成(未激活失败条件),那么这将触发部署“构建配置”运行。

    【讨论】:

    • 这就是我最终所做的。然而,这并不能回答问题。我所指的状态是步骤,只有在上一步成功时,下一步条件才设置为继续。有些东西没有加起来。这是我关心的问题——关于步骤,而不是构建配置。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      也就是说 - 对于您的情况,您应该考虑编写在失败时以非零退出代码退出的构建步骤,然后您可以在 Execute stepbuild step 中使用 If all previous steps finished successfully 选项。

      【讨论】:

      • 那么,您是在建议单元测试的步骤应该以非零代码退出,以防满足构建失败条件?但是如何根据构建失败条件告诉 step 返回非零代码?
      • 不是基于构建失败条件 - 如果您正在运行单元测试并且单元测试失败,则运行单元测试的步骤应返回非零退出代码。关于您如何运行单元测试的更多信息可能会有所帮助。例如,如果您使用 teamcity NUnit 插件运行 Nunit 测试,如果测试失败,它会以非零退出代码退出
      • 我明白你的意思。但是单元测试没有失败,只有构建失败条件为真。这意味着:所有单元测试都通过了,但覆盖率下降了 N%。我有一个构建失败条件来检查覆盖率是否下降,如果它下降,那么构建将被标记为失败。单元测试不会失败。在构建结束时,它被标记为失败,因此构建失败条件可以正常工作。如果覆盖率下降(意味着如果满足构建失败条件),我只需要跳过最后一步(部署)。
      • 好吧好吧 - 恐怕不可能基于构建失败条件跳过部署。您应该尝试将部署作为单独的构建并将其设置为在成功的持续集成构建时触发。完成构建触发器是这样做的方法。
      • 好的,那我想看看构建步骤中条件的目的是什么,我们可以说只有在构建状态成功时才执行。这是否意味着先前构建的状态,而不是当前构建的状态?
      猜你喜欢
      • 1970-01-01
      • 2013-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 2013-02-21
      • 2011-08-19
      相关资源
      最近更新 更多