Jenkins - 由于批处理命令,有时(非确定性?)将构建标记为失败

时间:2015-01-05 07:07:04

标签: 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=%%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   %#In('WMIC Path Win32_LocalTime获取DayOfWeek | Findstr [1-7]')   (设置DOW =%#)此时设置是意外的。   如果> == 1   set dow = Monday构建步骤'执行Windows批处理命令'标记构建   作为失败

由于我无法重现它 - 是否可以使批处理命令不将构建标记为失败? 它是Jenkins中的错误还是我的批处理文件中的错误?

1 个答案:

答案 0 :(得分:1)

  

是否可以使批处理命令不将构建标记为失败?

是的,将echo Done或其他内容写为执行Windows批处理命令步骤中的最后一行(不在批处理本身中)。由于该行将始终成功,因此整个步骤将始终标记为成功。显然,尽管有正当理由,脚本仍然存在失败的可能性。

现在,您的脚本失败的原因是因为在某些情况下(未确定),您的DOW值未设置。所以比较语句变得无效,因为它没有左侧。

为避免这种情况,您应该始终引用您的变量和字符串进行比较 if "%dow%"=="1" set dow=Monday
if "%dow%"=="2" set dow=Tuesday

这样,至少脚本不会因语法错误而失败,但是您仍然会以空dow(并且不完整dayinfo

结束

要弄清楚为什么你的dow有时会变空,你需要实际看到生成它的值的命令的结果。请执行以下操作:

WMIC Path Win32_LocalTime Get DayOfWeek
For /f %%# In ('WMIC Path Win32_LocalTime Get DayOfWeek^|Findstr [1-7]') Do (Set DOW=%%#)

成功后,它将在控制台中显示该命令的完整输出。当它失败时,您将看到该命令的错误,并从那里获取它。