1

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

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

我还希望 exe 记录一些其他详细信息(例如更改的内容 - 构建是通过还是失败)。有没有关于我如何做到这一点的文档?

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

4

2 回答 2

4

您在主要构建步骤中使用什么?马文特?蚂蚁?自定义脚本?有很多方法可以做到这一点,这在很大程度上取决于您的 .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 应用程序,并且没有生成正确的退出代码,那么您无法判断它是成功还是失败(以及失败的原因)

如果您确定它是哪一个,我将更新此答案。

于 2012-11-28T14:40:46.540 回答
0

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

  1. 将构建过程分成 2 个工作 - A. Upto Exe。B.发布 Exe
  2. 在作业A中,Add post build step运行作业B(无论A是否成功)
  3. 在 B 的配置中,编写脚本以使用 Jenkins 环境变量捕获输出。查看<yourjenkinsurl>/env-vars.html/

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

于 2012-11-28T04:43:10.903 回答