2012-11-28 137 views
1

作为构建过程的一部分,我编写了一个EXE,将数据库更改推送到临时数据库。Jenkins在外部可执行文件上通过或失败

这个过程有时会遇到错误,如果是的话,我想构建失败。我如何将EXE作为构建步骤添加,以便在失败时(我可以将其视为异常)捕获,我可以使构建失败并记录一些细节(类似于NUNit显示失败的方式)?

我还希望exe记录一些其他的细节(如改变了什么 - 构建是否通过或失败)。有没有任何文件可以做到这一点?

我正在使用MSBuild,并且我完全控制了EXE(我写了它)。我可以把它的代码输出什么,我想

回答

4

你在主构建步骤中使用了什么? Mavent?蚂蚁?自定义脚本?有很多方法可以做到这一点,它很大程度上取决于你的.exe的设计方式,这在OP中没有解释。

最简单的做法是从下拉菜单中添加另一个构建步骤。选择执行Windows批处理命令。在那里,写批处理命令启动.exe和捕获返回代码:

C:\Location_of_exe\your.exe 
IF NOT "%ERRORLEVEL%" == "0" (
    ECHO "Your exe failed" 
    EXIT /B 1 
) ELSE (
    ECHO "Your exe passed" 
) 

如果您的.exe就像正常的程序,它会返回退出代码为0时,成功的,否则它会返回一个非零退出代码。上述语句查找非零退出代码(指示某种故障),并且如果检测到的将退出批次,错误代码1本身EXIT /B 1。这反过来会向Jenkins表明构建步骤失败,并将标记作业失败。

再次,这在很大程度上取决于您的.exe是正确,失败时返回非零退出代码。

至于“我也想exe文件来登录其他一些细节”,再次,完全取决于您的.exe

  • 是否针对不同故障返回不同的退出代码? - 如果是这样,上述代码可以容易地修改,以捕获在日志中的所有可能性,并显示误差相应

  • 它是一个命令行的.exe,在控制台中显示不同的错误?如果是这样,那么从批处理中调用它会自动在Jenkins日志中显示错误。如果.exe没有返回正确的退出代码,您也可以使用这种方法。您可以捕获命令行输出并使用findstr来搜索特定的输出行以确定成功或失败

  • 如果您的.exe是一个GUI应用程序,并且不会生成正确的退出代码,那么您无法告诉他们是成功还是失败(以及失败)

我会更新这个答案,如果你确定它是哪一个。

+0

我正在使用MSBuild,并且我完全控制了EXE(我写它)。我可以编写失败返回非0。如果我明白你在说什么,我输出到控制台的任何内容都将被记录下来。我明天会测试这个。 – MillinMo

+1

@MillinMo是的,任何输出到控制台将被记录。您也可以缩短将错误代码返回到'EXIT%ERRORLEVEL%' – jwernerny

0

这是一个快速,我能想到的:

  1. 破坏构建过程分为2个职位 - A.高达EXE。 B.后的Exe
  2. 在就业市场,Add post build step运行作业B(A是否是成功的)
  3. 在B的配置,编写一个脚本来赶上使用詹金斯环境变量输出。退房<yourjenkinsurl>/env-vars.html/

但它是一个真正的Exe或一些其他可执行类似BAT,作为一个EXE是二进制,你无法去改变一个exe来实现这一点 - I would also like the exe to log some other details。您必须更改可执行文件的源代码才能捕获第3步中的变量并执行某些操作。

相关问题