Batch file Jenkins-有时(非决定性的?)由于批处理命令,将构建标记为失败
我通过Jenkins执行以下批处理(“执行Windows批处理命令”)。尽管在我“手动”构建项目时(当我点击“构建”按钮时),它总是(测试了50多次)起作用,但在计划构建期间它有时会崩溃Batch file Jenkins-有时(非决定性的?)由于批处理命令,将构建标记为失败,batch-file,jenkins,Batch File,Jenkins,我通过Jenkins执行以下批处理(“执行Windows批处理命令”)。尽管在我“手动”构建项目时(当我点击“构建”按钮时),它总是(测试了50多次)起作用,但在计划构建期间它有时会崩溃 REM REM get date in following format - day name - day - month name - year REM for /f "delims=" %%a in ('wmic OS Get localdatetime ^| find "."') do (set dt=
REM
REM get date in following format - day name - day - month name - year
REM
for /f "delims=" %%a in ('wmic OS Get localdatetime ^| find "."') do (set dt=%%a)
set year=%dt:~0,4%
set month=%dt:~4,2%
set day=%dt:~6,2%
if %month%==01 set month=Jan
if %month%==02 set month=Feb
if %month%==03 set month=Mar
if %month%==04 set month=Apr
if %month%==05 set month=May
if %month%==06 set month=Jun
if %month%==07 set month=Jul
if %month%==08 set month=Aug
if %month%==09 set month=Sep
if %month%==10 set month=Oct
if %month%==11 set month=Nov
if %month%==12 set month=Dec
For /f %%# In ('WMIC Path Win32_LocalTime Get DayOfWeek^|Findstr [1-7]') Do (Set DOW=%%#)
if %dow%==1 set dow=Monday
if %dow%==2 set dow=Tuesday
if %dow%==3 set dow=Wednesday
if %dow%==4 set dow=Thursday
if %dow%==5 set dow=Friday
if %dow%==6 set dow=Saturday
if %dow%==7 set dow=Sunday
set dayinfo=%dow% - %day%-%month%-%year%
错误消息如下所示:
对于>/F
%#在('WMIC Path Win32_LocalTime Get DayOfWeek | Findstr[1-7]”中执行
(Set DOW=%#)此时设置是意外的。
如果>==1
设置道=星期一生成步骤“执行Windows批处理命令”标记为生成
作为失败
由于我无法复制它-是否可以使批处理命令不将生成标记为失败?
是Jenkins中的bug还是我的批处理文件中的bug
是否可以使批处理命令不将生成标记为失败
是的,将echo Done
或其他内容写入执行Windows批处理命令的最后一行(而不是批处理本身)。因为这条路线总是成功的,所以整个步骤将被标记为始终成功。显然,您已经排除了脚本因正当原因而失败的可能性
现在,脚本失败的原因是在某些情况下(未确定),未设置DOW
的值。因此,比较语句变得无效,因为它没有左侧
为了避免这种情况,您应该始终在比较中引用变量和字符串。如果“%dow%”==“1”设置dow=周一
如果“%dow%”=“2”设置道指=周二
这样,至少脚本不会因为语法错误而失败,但是您仍然会得到空的dow
(以及不完整的dayinfo
)
要弄清楚为什么你的dow
有时会变成空的,你需要实际查看生成它的值的命令的结果。以下各点也是如此:
WMIC Path Win32\u LocalTime Get DayOfWeek
For/f%%#In('WMIC Path Win32_LocalTime Get DayOfWeek^ Findstr[1-7])Do(Set DOW=%%#)
成功后,它将在控制台中显示命令的完整输出。当它失败时,您将看到该命令的错误,并从此处开始执行。调用某些脚本时,我遇到了类似的问题。解决方案是使用“call”启动,比如
callmyscript.exe