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

r8uurelv  于 2022-09-20  发布在  Jenkins
关注(0)|答案(2)|浏览(207)

我正试图在Jenkins创造一个两步走的工作。我希望第二步只在第一步失败的情况下运行。(第一步执行单元测试以查看我正在编译的代码是否正确--如果不是,那么我想在第二步中运行一些诊断程序)。

对于这一点,有条件的阶梯塞似乎是一个很好的选择。但是,当第一步失败时,我不知道如何使用条件步骤插件来运行第二步。

条件步骤插件提供了一个条件列表,如‘Never’、‘Boolean Condition’……和‘当前构建状态’。我认为我应该使用“当前构建状态”条件,并将最差状态设置为“失败”,将最佳状态设置为“不稳定”。然后,如果第一步失败,第二步将运行。

然而,这似乎存在一个问题。当第一步失败时,Jenkin‘s会在该点停止作业。因此,第二步永远没有机会评估它的状况,看看它是否应该运行。

所以我不明白如何在条件步骤插件中使用‘当前构建状态’失败--就好像构建已经失败了,我们永远不会进入条件步骤。如何在步骤1中将构建状态标记为失败,而不是让Jenkins在该点停止作业?

多谢

戴夫·辛克莱

33qvvth1

33qvvth11#

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

我相信,在构建后任务生态系统中,还会有其他一些优雅的选择。我正在关注这个问题,请Jenkins的Maven来回答。

ebdffaop

ebdffaop2#

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

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

相关问题