代码之家  ›  专栏  ›  技术社区  ›  Mikael Koskinen

TeamCity命令行构建运行程序:如何使构建失败?

  •  27
  • Mikael Koskinen  · 技术社区  · 14 年前

    我们正在使用teamcity的命令行build runner调用BAT文件。BAT文件通过调用Visual Studio 2008的“devenv.exe”来构建我们的解决方案,然后执行单元测试并创建正确的文件夹结构。

    如果对devenv的调用失败,我们希望停止执行BAT文件,并使teamcity认识到构建失败。我们可以通过检查 错误级别 (如果构建失败,则为1),此时我们可以退出BAT文件。但是 我们怎样才能告诉TeamCity构建失败 ?

    这就是我们所尝试的:

    call "build.bat"
    IF ERRORLEVEL 1 EXIT /B 1
    

    但TeamCity无法识别我们的退出代码。相反,生成日志如下所示:

    [08:52:12]: ========== Build: 28 succeeded or up-to-date, 1 failed, 0 skipped ==========
    [08:52:13]: C:\_work\BuildAgent\work\bcd14331c8d63b39\Build>IF ERRORLEVEL 1 EXIT /B 1 
    [08:52:13]: Process exited with code 0
    [08:52:13]: Publishing artifacts
    [08:52:13]: [Publishing artifacts] Paths to publish: [build/install, teamcity-info.xml]
    [08:52:13]: [Publishing artifacts] Artifacts path build/install not found
    [08:52:13]: [Publishing artifacts] Publishing files
    [08:52:13]: Build finished
    

    因此TeamCity将报告构建成功。我们怎么解决这个问题?

    解决方案:

    Teamcity提供了一种称为 Service Messages 它可以用来处理这样的情况。 我已经更新了构建脚本,如下所示:

    IF %ERRORLEVEL% == 0 GOTO OK
    echo ##teamcity[buildStatus status='FAILURE' text='{build.status.text} in compilation']
    EXIT /B 1
    :OK
    

    因此,TeamCity将报告我的构建因“编译失败”而失败。

    1 回复  |  直到 11 年前
        1
  •  21
  •   Enrico Campidoglio    11 年前

    Build Script Interaction with TeamCity 话题。

    可以按以下方式报告生成日志的消息:

    ##teamcity[message text='<message text>' errorDetails='<error details>' status='<status value>']

    在哪里?

    • 状态属性可以采用以下值:normal、warning和 失败,错误。默认值为“正常”。
    • 错误详细信息 只有当状态为“错误”时才使用属性,在其他情况下,它是 忽略。

    如果生成状态为错误,则此消息将使生成失败,并且 “如果生成运行程序记录了错误消息,则生成失败” 复选框是 已在“生成配置常规设置”页上选中。例如:

    ##teamcity[message text='Exception text' errorDetails='stack trace' status='ERROR']

    2013-08-30更新:

    从TeamCity 7.1开始,应使用 buildProblem 改为服务消息:

    ##teamcity[buildProblem description='<description>' identity='<identity>']
    
    推荐文章