Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file Jenkins管道未在批次失败阶段失败_Batch File_Jenkins_Jenkins Pipeline - Fatal编程技术网

Batch file Jenkins管道未在批次失败阶段失败

Batch file Jenkins管道未在批次失败阶段失败,batch-file,jenkins,jenkins-pipeline,Batch File,Jenkins,Jenkins Pipeline,在jenkins声明性管道中,如果我添加以下步骤: bat '''dir QWERTY''' 由于没有这样的目录,它将按预期失败 然而,这是一个包含许多语句的bat脚本,因此我希望在出现错误时立即失败。我已经习惯于附加| | exit/b来处理这个问题。但作为詹金斯管道的一部分,这似乎不起作用 bat '''dir QWERTY || exit /b''' bat '''dir QWERTY || exit /b %ERRORLEVEL%''' 上述各项都没有一项不合格。为什么? 第三种选择

在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%
'''

虽然似乎有效,但这会影响脚本的可读性。

我目前没有Jenkins,因此我无法真正测试所有方法,但从技术上讲,您可以通过以下方法测试链是否有效:

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

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

bat '''
:error
if %errorlevel% neq 0 exit /b!

dir QWERTY & call :error
dir AZERTY & call :error
'''

结果是在Jenkins管道中,我不能使用
/b
。因此:

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

有效。

多么有趣/可怕的话题。我不相信Jenkins会在构建过程中发现错误。我所处的公司环境限制我使用windows主机。我通常运行gnu环境,因此我不习惯cmd对ERRORLEVEL的态度,但在
bat
中似乎存在%ERRORLEVEL%的问题

我尝试的是:

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

在CMD:
dirqeqcd中;echo%ERRORLEVEL%
---文件不存在,但不进行任何回显(因为%ERRORLEVEL%已计算为空字符串?)

在CMD:
dir qeQcd | | echo%ERRORLEVEL%
---文件不存在,ERRORLEVEL计算为1。所以,是的,强制CMD在设置它之前不计算ERRORLEVEL

在jenkins中:
bat'dir qe0cd | | echo%ERRORLEVEL%
——此文本的计算结果为控制台日志中的dir qe0cd | | echo 0,即jenkins或中间环境已经计算了ERRORLEVEL。请注意,回显确实发生,因此从dir返回非零状态

在CMD:
bat'dorqe0cd | | echo%ERRORLEVEL%'
——它抱怨dir没有作为可执行文件找到,并回显1

在jenkins中:
bat'dor qe0cd | | echo%ERRORLEVEL%'
——它抱怨dir没有作为可执行文件找到,但再次回显0

在jenkins中:
bat'dor qe0cd | | exit'
——实际上使步骤、阶段和作业失败。所以这看起来像是一个健壮的成语


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

请尝试
bat''dir QWERTY&&echo success'.\124; echo Failed'.
并发布它打印的内容?echo命令确实打印失败,但是,再次用
exit/b
替换它并没有使该阶段失败。结果证明,如果我放下
/b
,然后退出
,它就会工作。这一部分让我感到困惑,因为在我以前的非流水线jenkins设置中,它和
/b
一起工作。这很奇怪。如果您退出%errorlevel%
而不使用
/b
,它也应该可以工作?是的,似乎就是这样<代码>退出/b 1适用于Jenkins,但批处理文件中的
if
中除外。它必须简单地
退出1