Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file Jenkins-有时(非决定性的?)由于批处理命令,将构建标记为失败_Batch File_Jenkins - Fatal编程技术网

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

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=

我通过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 %#在('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