Jenkins传递或失败构建外部可执行文件

时间:2012-11-28 01:49:38

标签: jenkins hudson exe jenkins-plugins

作为构建过程的一部分,我编写了一个将数据库更改推送到临时数据库的EXE。

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

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

我正在使用MSBuild,我完全控制了EXE(我写了它)。我可以编码来输出我想要的内容

2 个答案:

答案 0 :(得分: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应用程序,并且没有生成正确的退出代码,那么您无法确定它是否成功或失败(以及失败)

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

答案 1 :(得分:0)

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

  1. 将构建过程分解为2个作业 - A。 Upto Exe。 B。 Post Exe
  2. 在作业A中,Add post build step运行作业B(无论A是否成功)
  3. 在B的配置中,编写脚本以使用Jenkins环境变量捕获输出。查看<yourjenkinsurl>/env-vars.html/
  4. 但它真的是Exe或其他一些可执行文件,比如BAT,因为exe是二进制文件而你无法真正改变exe来实现这一点 - I would also like the exe to log some other details。您必须更改可执行文件的源代码以捕获步骤3中的变量并执行某些操作。