错误代码为0但Jenkins作业失败

时间:2014-07-03 11:34:58

标签: windows batch-file jenkins cmd

我总是让詹金斯失败:

  

构建步骤'执行Windows批处理命令'将构建标记为失败

但是当我输入批处理命令时:" echo退出代码是%errorlevel%"我得到0代码。

我的批处理命令是:

ELSE (
   ROBOCOPY.EXE C:\dir2\ C:\dir1\ script.bat /IS
   cd C:\dir1\
   echo Exit Code is %errorlevel%
   C:\dir1\script.bat
   echo Exit Code is %errorlevel%
   ROBOCOPY.EXE C:\dir1 C:\dir3 /E /IS /XF *.config 
   echo Exit Code is %errorlevel%
)
echo TEST

从不显示命令echo TEST。当我从批处理中删除" C:\ dir1 \ script.bat"一切正常,詹金斯的工作就是成功。

脚本bat仅包含如下命令:

  

del。\ bin \ library.dll

你怎么看,问题出在script.bat上?当我在这个脚本的末尾添加:EXIT / B 0时,作业也失败了。

1 个答案:

答案 0 :(得分:0)

你必须在这里向我们提供超过一半的陈述,以获得明确的答案。可能缺少)之前的else必须else关键字位于同一行)。

更有可能的是,你是delayed expansion问题的4800万受害者。在SO上看到无数的例子。

在块语句(a parenthesised series of statements)中,解析整个块并执行然后。块中的任何%var%将在解析块时被该变量的值替换 - 在块执行之前 - 同样的事情适用于{{1 }}

因此,FOR ... DO (block)将在遇到IF (something) else (somethingelse)时使用%variables%的值执行。

解决此问题的两种常见方法是1)使用IF并使用setlocal enabledelayedexpansion代替!var!来访问已更改的%var%或2}值以进行调用一个子程序,用于使用更改的值执行进一步处理。

因此,在执行之前,(假定的)var 已解析时,您会看到errorlevel的价值。