【问题标题】:Jenkins - sometimes (non-deteministic?) mark builds as failed, because of batch command詹金斯 - 有时(非确定性?)将构建标记为失败,因为批处理命令
【发布时间】:2015-01-05 07:07:03
【问题描述】:

我通过 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 Get DayOfWeek|Findstr [1-7]') 做 (Set DOW=%# ) 此时设置是意外的。 如果> ==1 set dow=Monday Build step 'Execute Windows batch command' 标记构建 失败

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

【问题讨论】:

  • 我在调用一些脚本时遇到了类似的问题。解决方案是使用“呼叫”启动,例如 call my_script.exe

标签: batch-file jenkins


【解决方案1】:

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

是的,在 Execute Windows Batch Command 步骤的最后一行写 echo Done 或其他内容(不在批处理本身中)。由于该行将始终成功,因此整个步骤将始终标记为成功。显然,您已经排除了脚本因正当理由而失败的任何可能性。

现在,您的脚本失败的原因是在某些情况下(未确定),您的 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=%%#)

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-27
    • 1970-01-01
    • 2014-07-18
    • 1970-01-01
    • 2013-01-30
    相关资源
    最近更新 更多