仅当上一步失败时如何在 Jenkins 中运行条件步骤

Posted

技术标签:

【中文标题】仅当上一步失败时如何在 Jenkins 中运行条件步骤【英文标题】:How to run a conditional step in Jenkins only when a previous step fails 【发布时间】:2014-03-24 20:04:47 【问题描述】:

我正在尝试在 Jenkins 中创建一个两步作业。我希望仅在第一步失败时才运行第二步。 (第一步执行单元测试以查看我正在编译的代码是否良好 - 如果不是那么我想在第二步中运行一些诊断)。

条件步骤插件似乎是一个不错的选择。但是,我不知道如何使用条件步骤插件在第一步失败时使第二步运行。

条件步骤插件提供条件列表,例如“从不”、“布尔条件”...和“当前构建状态”。我原以为我应该使用“当前构建状态”条件并将最差状态设置为“失败”,将最佳状态设置为“不稳定”。那么如果第一步失败,第二步就会运行。

但是这似乎有问题。当第一步失败时,詹金就会停止工作。所以第二步永远没有机会评估它的状况,看看它是否应该运行。

所以我看不出如何在条件步骤插件中使用“当前构建状态”失败 - 好像构建已经失败,我们永远不会进入条件步骤。如何在第 1 步中将构建状态标记为失败,但没有让 Jenkins 在那一刻停止工作?

非常感谢

戴夫·辛克莱

【问题讨论】:

在这里查看 Jason ***.com/questions/9664716/…的答案 【参考方案1】:

一个不优雅的出路是使用“构建后任务插件”。 它可以解析构建日志。因此,您可以将其设置为检查失败日志语句。找到后,您可以启动脚本。也许你可以通过这个脚本触发第二次构建。

我确信在后期构建任务生态系统中还会有其他一些优雅的选项。我正在看这个问题,希望看到 Jenkins 专家来回答它。

【讨论】:

【参考方案2】:

您可以创建始终成功的脚本构建步骤。在该脚本中,您可以在一切正常时创建一个文件,在出现问题时创建另一个文件。您可以在两个单独的条件构建步骤中检查文件是否存在。例如:

REM Clean up flags
del build_failed
del build_ok

REM This should be the actual buildstep

REM Foobar does not exist, so it will return an error. dir will always work. Exchange the     REM between the two lines to test both scenarios
dir foobar
REM dir

REM Set the flags based on the build step status
IF NOT %ERRORLEVEL% == 0 (
    echo  > build_failed
) ELSE (
    echo  > build_ok
)

REM Ensure that this step will always pass
EXIT 0

【讨论】:

以上是关于仅当上一步失败时如何在 Jenkins 中运行条件步骤的主要内容,如果未能解决你的问题,请参考以下文章

仅当所有匹配条件都失败时才更新标志

如何设置 SBT 构建以在 Jenkins 测试失败时返回零退出代码?

如何根据 maven pom 版本运行 github-action 条件?

仅当文件数大于零时,如何在 MSBuild 中运行任务?

仅当条件为 True 时才在 python 中使用 Eel 调用 JavaScript 函数

仅当条件在 Reactjs 中第二次运行时才显示水平线