Jenkins在外部可执行文件上通过或失败构建

Jenkins在外部可执行文件上通过或失败构建,jenkins,hudson,exe,jenkins-plugins,Jenkins,Hudson,Exe,Jenkins Plugins,作为构建过程的一部分,我编写了一个EXE,将数据库更改推送到暂存数据库 这个过程有时会遇到错误,如果是这样,我希望构建失败。如何将EXE添加为构建步骤,以便在发生故障时(我可以将其作为异常捕获),可以使构建失败并记录一些细节,类似于NUNit显示故障的方式 我还想让exe记录一些其他细节,比如发生了什么变化——构建是通过还是失败。有关于我如何做到这一点的文档吗 我正在使用MSBuild,我可以完全控制我编写它的EXE。我可以将其编码为输出我想要的内容这是我能想到的一个快速方法: 将构建过程分解为

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

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

我还想让exe记录一些其他细节,比如发生了什么变化——构建是通过还是失败。有关于我如何做到这一点的文档吗


我正在使用MSBuild,我可以完全控制我编写它的EXE。我可以将其编码为输出我想要的内容

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

将构建过程分解为两个作业-A.Upto Exe。B.Post Exe 在作业A中,添加生成后步骤以运行作业B,无论A是否成功 在B的配置中,编写一个脚本,使用Jenkins环境变量捕获输出。签出/env-vars.html/
但它真的是一个Exe或其他可执行文件,如BAT,作为一个Exe是一个二进制文件,你不能真正改变一个Exe来实现这一点-我也希望Exe记录一些其他细节。您必须更改可执行文件的源代码,以捕获步骤3中的变量并执行某些操作。

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

将构建过程分解为两个作业-A.Upto Exe。B.Post Exe 在作业A中,添加生成后步骤以运行作业B,无论A是否成功 在B的配置中,编写一个脚本,使用Jenkins环境变量捕获输出。签出/env-vars.html/
但它真的是一个Exe或其他可执行文件,如BAT,作为一个Exe是一个二进制文件,你不能真正改变一个Exe来实现这一点-我也希望Exe记录一些其他细节。您必须更改可执行文件的源代码,以捕获步骤3中的变量并执行某些操作。

您在主要构建步骤中使用的是什么?马文特?蚂蚁自定义脚本?有很多方法可以做到这一点,这在很大程度上取决于.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本身退出/B 1。这反过来将向Jenkins指示构建步骤失败,并将标记作业失败

同样,这在很大程度上取决于.exe是否正确,以及失败时是否返回非零退出代码

至于我也希望exe记录一些其他细节,再一次,完全取决于你的.exe

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

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

如果您的.exe是一个GUI应用程序,并且没有生成正确的退出代码,那么您就无法判断它是成功的还是失败的以及失败的原因


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

您在主要构建步骤中使用了什么?马文特?蚂蚁自定义脚本?有很多方法可以做到这一点,这在很大程度上取决于.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本身退出/B 1。这反过来将向Jenkins指示构建步骤失败,并将标记作业失败

同样,这在很大程度上取决于.exe是否正确,以及失败时是否返回非零退出代码

至于我也希望exe记录一些其他细节,再一次,完全取决于你的.exe

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

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

如果您的.exe是一个GUI应用程序,并且没有生成正确的退出代码,那么您就无法判断它是成功的还是失败的以及失败的原因


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

我使用的是MSBuild,并且我可以完全控制我编写的EXE。我可以对返回非0的失败进行编码。如果我理解你的意思,我输出到控制台的任何内容都会被记录下来。明天我将对此进行测试。@MillinMo是的,将记录到控制台的任何输出。您还可以缩短返回错误代码以退出%ERRORLEVEL%的时间。我正在使用MSBuild,并且我可以完全控制我编写的EXE。我可以对返回非0的失败进行编码。如果我理解你的意思,我输出到控制台的任何内容都会被记录下来。明天我将对此进行测试。@MillinMo是的,将记录到控制台的任何输出。您还可以缩短返回错误代码的时间,以退出%ERRORLEVEL%