允许用户配置 Build 失败的条件是很有用的功能,它是我们配置复杂 Build 流程的基础。TeamCity 为用户自定义 Build 失败条件提供了很好的支持。这些条件大体上可以分为两类,分别是:

基本的 Build 失败条件
高级的 Build 失败条件

基本的 Build 失败条件

打开 Build 的配置界面并选择 "Failure Conditions",红框中的内容即 TeamCity 提供的基本 Build 失败条件:

设置超时时间

此选项设置 Build 最大执行时间,超过这个时间就停止 Build,并显示 Build 失败,并提示 timeout 错误:

这个选项主要处理 Build 被挂起的问题,同时能保正高效的使用 agent。

Build 过程返回非 0 值

默认选中,当 Build 程序返回了非 0 值时就把 Build 标记为失败。

检查 Build 中单元测试的结果

这个选项默认也是选中。只要有一个失败的单元测试就把 Build 标记为失败。但是并不会由于单元测试的失败而终止 Build 过程。如果没有选中这个选项,即便有单元测试失败 Build 也会被标记为成功。

检查日志中的错误消息

当检测到 Build 日志中含有出错的消息时把 Build 标记为失败。使用这个选项带来的问题是很容易造成误报。因为一些复杂的 Build 很难完全消除日志中的错误消息。

检测到内存溢出或崩溃

这个选项仅用于 Java 项目, 如果检测到 JVM 崩溃或者是 Java out of memory 问题就把 Build 标记为失败。

高级的 Build 失败条件

检测 Build 指标的变化

TeamCity 内置了一些度量指标,比如代码覆盖率、重复的代码等等。这里有一个很长的列表,当有搞不定的需求时,不妨看看,说不定会有意外的收获:

每次的 Build 都会生成这些度量指标。对于这些度量的指标我们可以为之指定一个阈值,一旦超标就把 Build 标记为失败。TeamCity 在这里支持两种比较方式:分别是与一个固定值对比和与另外一个 Build 对比:

默认选项是与一个固定值,比较有用的是下一个选项:"value from another build",即和某次 Build 的结果比:

这幅图中的配置说明:与最后一次 Pinned 的 Build 相比,如果产物的 Size 增大超过了 1%,Build 就失败。运行一下,如果失败,消息是这样的:

检测日志中的文本

日志的内容往往是最丰富的,并且很容易控制。因此通过检测日志的内容控制 Build 成功与否就变得十分重要。
TeamCity 能够对 Build 日志中的每一行进行文本匹配,并根据匹配的结果决定 Build 是成功还是失败。需要注意的是,在匹配时会忽略掉行开始处的日期和前缀等信息,因为这些信息并不是真正的 Build 消息。TeamCity 支持使用纯文本进行匹配,也支持 Java 格式的正则表达式进行匹配。匹配的选项可以选择包含指定的文本或者是不包含指定的文本。下图演示了一个文本类型检测:

如果发现日志中出现了文本 'Failed to restore plugin "cordova-plugin-x-socialsharing" from config.xml' 就让 Build 失败,并且显示消息 "restore cordova-plugin-x-socialsharing failed." TeamCity 更为贴心的是提供了测试失败条件的功能。点击 "Test on finished build",并选择一个历史中的 Build 记录就可以了:

总结

如何判定 Build 成功/失败是相当重要的。 一般的 Build,使用 TeamCtiy 默认的配置基本就够用了。碰到复杂的场景,比如需要根据 Build 的结果来控制后续的执行流程时,就可以通过更高级的配置来完成任务。正是具备了这样的能力,我们才能够轻松的通过 TeamCity 进行持续集成。

TeamCity : Build 失败条件的更多相关文章

  1. Jenkins build失败条件

    在Jenkins 项目写了很多剧本.有时候,我发现脚本失败,但Jenkins运行成功. Jenkins无论是通过退出代码0比量build成功. 因此,newLISP在.您可以使用(exit)对于成功. ...

  2. TeamCity Build 步骤的执行策略

    TeamCity 会根据前一个 build 步骤的返回状态和当前的 build 状态来综合判断是否运行下一个 build 步骤.1 失败状态 当满足下面条件时 build 步骤的状态被确定为失败: b ...

  3. TeamCity : Build 版本控制系统配置

    VCS (版本控制系统) 是用来跟踪项目源文件版本变化的系统.它还有其它的名字,比如 SCM(源代码管理).当前 TeamCity 内置支持的 VCS 类型有:Git, Subversion, Mer ...

  4. node c/c++扩展模块build失败.

    "深入浅出nodejs 朴灵" 例子 c/c++扩展模块 http://diveintonode.org/ 在作者的帮助下,build成功. 下面贴出的hello.cc和bindi ...

  5. No compiler is provided in this environment. --Maven build失败

    今天,maven build 失败了, 遇到下面的问题 经过查找,通过这个大佬的blog(  https://blog.csdn.net/lslk9898/article/details/738367 ...

  6. IDEA配置好maven后新建maven项目一直build失败的解决方法

    maven配置了aliyun中央仓库后,IDEA新建maven项目一直出现以下问题: 相信有遇到这个问题的小伙伴很蛋疼,明明maven配置没错,新建项目却一直build失败,为了这个问题我重装过几次I ...

  7. 【vue】解决npm run build失败问题

    问题说明: 首先,npm run build失败的原因大部分都是因为webpack的子库和webpack的版本号不对应的问题

  8. TeamCity : Build 基本配置

    前文中我们在 TeamCity 中创建了一个项目 HelloApp,并在这个项目中创建了一个名为 HelloAppDailyBuild 的Build 用来编译 demo 程序.本文我们将详细介绍 Bu ...

  9. maven web项目build失败

    通过maven build发布web项目到tomcat时报如下异常: [INFO] ---------------------------------------------------------- ...

随机推荐

  1. ionic复选框应用

    如图:在项目中我需要实现这个效果布局和功能(进入页面默认全选,点击之后可以不选择) HTML代码: <div class="row" ng-repeat="engi ...

  2. 【转载】Windows系统下删除ubuntu

    原始日期:2013-11-02 15:51 以windows7为例:   用MbrFix.exe修复MBR 卸载Windows/Linux双系统中的Ubuntu1.如果你有Windows系统安装盘/启 ...

  3. 字符串数组与字符串之间的互转(join/split)

    1.Java 1-1.字符串数组=>字符串:StringUtils: join(Object[] array, String separator) 例: Java代码 收藏代码 import o ...

  4. 网络组Network Teaming

    网络组team:是将多个网卡聚合在一起,从而实现容错和提高吞吐量 1 创建网络组接口 nmcli connection add type team con-name TEAMname ifname I ...

  5. MySQL访问控制实现原理

    MySQL访问控制实现原理 MySQL 访问控制实际上由两个功能模块共同组成,从第一篇的第二章架构组成中可以看到,一个是负责 “看守 MySQL 大门”的用户管理模块,另一个就是负责监控来访者每一个动 ...

  6. USACO Ordered Fractions

    首先看一下题目 Consider the set of all reduced fractions between 0 and 1 inclusive with denominators less t ...

  7. 规定CSS的属性仅在IE下生效 在非IE浏览器下不生效

    css中判断IE版本的语句<!--[if gte IE 6]> Only IE 6/+ <![endif]-->: 1. <!--[if !IE]> 除IE外都可识 ...

  8. I/O多路复用之epoll实战

    概念 IO多路复用是指内核一旦发现进程指定的一个或者多个IO条件准备读取,它就通知该进程 通俗理解(摘自网上一大神) 这些名词比较绕口,理解涵义就好.一个epoll场景:一个酒吧服务员(一个线程),前 ...

  9. accp8.0转换教材第4章MySQL高级查询(二)理解与练习

    知识点:EXISTS子查询.NOT EXISTS子查询.分页查询.UNION联合查询 一.单词部分 ①exist存在②temp临时的③district区域 ④content内容⑤temporary暂时 ...

  10. Ajax获取数据的几种格式和解析方式

    一.什么是ajax  AJAX的全称是Asynchronous JavaScript and XML(是异步的 javascript 和 XML).  ajax不是新的编程语言,而是一种使用现有标准的 ...