我通过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中的错误还是我的批处理文件中的错误?
答案 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=%%#)
成功后,它将在控制台中显示该命令的完整输出。当它失败时,您将看到该命令的错误,并从那里获取它。