在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%
'''
虽然似乎可以正常工作,但这会损害脚本的可读性。
答案 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。
:bat 'dor qe0cd || exit'
---实际上没有完成步骤,阶段和工作。因此,这看起来像是一种健壮的习语。
我想知道CMD是否有机会在完成字符串解析之前失败,它可能仍返回零状态并允许jenkins通过...?