詹金斯管道在批处理失败时不会失败

时间:2018-08-20 13:16:27

标签: batch-file jenkins jenkins-pipeline

在jenkins声明性管道中,如果我添加这样的步骤:

bat '''dir QWERTY'''

由于没有这样的目录,它将按预期方式失败。

但是,这是一个包含很多语句的bat脚本,因此,我想在出现错误时立即失败。我习惯于附加|| exit /b来解决这个问题。但是作为詹金斯管道的一部分,这似乎不起作用。

bat '''dir QWERTY || exit /b'''
bat '''dir QWERTY || exit /b %ERRORLEVEL%'''

以上均未通过该阶段。为什么?

第三种选择:

bat '''dir QWERTY
if %errorlevel% neq 0 exit /b %ERRORLEVEL%
'''

虽然似乎可以正常工作,但这会损害脚本的可读性。

3 个答案:

答案 0 :(得分:2)

我目前没有詹金斯人,所以我无法真正测试所有方法,但是从技术上讲,您可以通过以下方式测试链条是否工作:

std::vector<Book> database;
database.push_back(b);

这应该打印两个命令之一,如果消息是bat '''dir QWERTY && echo success || echo Failed''' ,则该过程应该可以进行。然后,您可以设置一个更具可读性的字符串:

failed

您可以通过调用标签来保留bat '''dir QWERTY && echo. || exit /b''' 方法:

if %errorlevel%

答案 1 :(得分:0)

在Jenkins管道中无法使用/b。因此:

bat '''dir QWERTY || exit'''

有效。

答案 2 :(得分:-1)

一个有趣/可怕的话题。我不确定詹金斯会在构建过程中遇到麻烦。我处在必须使用Windows主机的公司环境中。我通常在gnu环境中运行,因此我不习惯cmd对ERRORLEVEL的态度,但是bat中的%ERRORLEVEL%似乎确实存在问题。

我尝试过的事情:

在詹金斯语中:bat 'exit 1' ---步骤/阶段失败,作业失败。因此可以向上传播错误状态。

在CMD中:dir qeQcd ; echo %ERRORLEVEL% ---文件不存在,但是没有回显任何信息(因为%ERRORLEVEL%已被评估为空字符串?)

在CMD中:dir qeQcd || echo %ERRORLEVEL% ---文件不存在,ERRORLEVEL评估为1。所以,是的,强制CMD在设置后才评估ERRORLEVEL。

在jenkins中:bat 'dir qe0cd || echo %ERRORLEVEL%' ---此文本在控制台日志中评估为>dir qe0cd || echo 0,即Jenkins或中间环境已评估ERRORLEVEL。请注意,回声确实发生了,因此从目录发生了非零返回状态。

在CMD中:bat 'dor qe0cd || echo %ERRORLEVEL%' ---抱怨找不到dir作为可执行文件,并回显1。

在詹金斯语中:bat 'dor qe0cd || echo %ERRORLEVEL%' ---抱怨找不到dir作为可执行文件,而是再次回显0。

詹金斯(Jenkins)中的

bat 'dor qe0cd || exit' ---实际上没有完成步骤,阶段和工作。因此,这看起来像是一种健壮的习语。

我想知道CMD是否有机会在完成字符串解析之前失败,它可能仍返回零状态并允许jenkins通过...?