【问题标题】:Saving ANT build results and displaying at end of batch run保存 ANT 构建结果并在批处理运行结束时显示
【发布时间】:2014-12-09 02:38:43
【问题描述】:

我编写了一个批处理文件,可以按顺序运行多个 ant 构建。我想知道是否有一种方法可以保存每个构建的结果(无论是成功还是失败)并在最后显示它?例如:

Project1 - Success
Project2 - Success
Project3 - Failed
Project4 - Success

我无法编辑任何 ant 构建文件,只能编辑我用来运行它们的批处理文件:

@echo off
cd c:\<project1_dir>\build
call C:\Home\apache-ant-1.9.4\bin\ant -buildfile build1.xml
echo.
cd c:\<project2_dir>\build
call C:\Home\apache-ant-1.9.4\bin\ant -buildfile build2.xml
echo.
cd c:\<project3_dir>\build\
call C:\Home\apache-ant-1.9.4\bin\ant -buildfile build3.xml
echo.
cd c:\<project4_dir>\build
call C:\Home\apache-ant-1.9.4\bin\ant -buildfile build4.xml

谢谢!

更新

根据 David W 的回答,我得出以下结论:

@echo off
cd c:\<project1_dir>\build
call C:\Home\apache-ant-1.9.4\bin\ant -buildfile build1.xml
set result1=%ErrorLevel%
echo.
cd c:\<project2_dir>\build
call C:\Home\apache-ant-1.9.4\bin\ant -buildfile build2.xml
set result2=%ErrorLevel%
echo.
cd c:\<project3_dir>\build\
call C:\Home\apache-ant-1.9.4\bin\ant -buildfile build3.xml
set result3=%ErrorLevel%
echo.
cd c:\<project4_dir>\build
call C:\Home\apache-ant-1.9.4\bin\ant -buildfile build4.xml
set result4=%ErrorLevel%

if "%result1%"=="0" (
    echo Project1: Succeeded
) else (
    echo Project1: Failed
)
if "%result2%"=="0" (
    echo Project2: Succeeded
) else (
    echo Project2: Failed
)
if "%result3%"=="0" (
    echo Project3: Succeeded
) else (
    echo Project3: Failed
)
if "%result4%"=="0" (
    echo Project4: Succeeded
) else (
    echo Project4: Failed
)

上面的代码完全符合我的要求。非常感谢!

【问题讨论】:

    标签: batch-file ant build


    【解决方案1】:

    Ant 在良好构建时返回退出代码0,在构建不良时返回非零退出代码。这存储在errorLevel 中,可以使用if 语句进行测试:

    if errorlevel 1 (
       echo "Job Failed"
    )
    if %ErrorLevel% EQU 0 (
       echo "Job Succeeded
    )
    

    或者类似的东西...我对我的 Windows 批处理文件语法不太了解。我不知道call 是如何影响ErrorLevel 的设置的。您可能需要在调用的脚本中将环境变量设置为 ErrorLevel,然后从那里开始工作。

    看看使用像Jenkins 这样的持续构建系统,它将为您自动解决很多这些问题。 Jenkins 可以构建:

    • 在特定时间。
    • 源代码更改时。
    • 按需
    • 或以上的组合(每天下午 5 点构建,但前提是源代码已更改)。

    这会将构建移至独立服务器(不再,它在我的机器上工作问题),Jenkins 将保留构建输出,在其仪表板上显示哪些作业成功或失败,甚至构建失败时向特定人员(包括罪魁祸首)发送电子邮件(或推文或即时消息)。如果您使用单元测试,Jenkins 可以运行单元测试,并向您显示这些测试中有多少成功或失败。

    Jenkins 使用 Java,但设置起来相当容易——即使在 Windows 系统上也是如此。它可以使用 Tomcat 或 JBoss 作为应用服务器引擎,或者它自己的内部应用服务器。

    【讨论】:

    • 我将 Jenkins 用于我的 Java 项目,但这只是我在 Eclipse 中用于构建整个工作区的工具。我这样做是为了确保每个项目都按特定顺序构建,因为有些项目依赖于其他项目,而这些项目需要先构建。 “errorlevel”是内置的,还是我需要手动创建/设置的变量?我知道有一种方法可以模拟批处理文件中的数组,所以我可以将每次调用的结果添加到其中,如果我可以在使用“调用”语句后检索结果
    • 我确实把这件事弄得太复杂了。根据您的回答,我现在可以正常工作了。我会在我原来的问题中发布更新。感谢您的帮助!
    • Errorlevel 既是环境变量,也是批处理中的builtin。如果你说if ErrorLevel 1,它会检查退出代码 1 或更高。如果你说%ErrorLevel% EQ 2,它正好是2。这就是为什么你不能做if ErrorLevel 0。至少如果我记得我的批处理编程正确的话。
    • 从我所见,你是绝对正确的。根据您的回答,我编辑了我的原始帖子以显示成功的代码。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-30
    • 1970-01-01
    • 1970-01-01
    • 2022-12-02
    • 2012-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多