允许用户配置 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. Intellj IDEA光标为insert状态,无法删除内容

    以前用得是社区版的IDEA,今天装了14版本的,结果导入项目后,发现打开java文件的光标是win系统下按了insert键后的那种宽的光标,并且还无法删除内容,且按删除(delete)键也只见光标往前 ...

  2. mysql安装不上 failed to install the service

    先前安装的没有卸载干净必须删除相应的注册表方法如下:1)“运行”中敲入“Regedit”进入注册表编辑2)HKEY_LOCAL_MACHINE->SYSTEM->ControlSet001 ...

  3. 跨进程通信之Messenger

    1.简介 Messenger,顾名思义即为信使,通过它可以在不同进程中传递Message对象,通过在Message中放入我们需要的入局,就可以轻松实现数据的跨进程传递了.Messenger是一种轻量级 ...

  4. JavaSE中Collection集合框架学习笔记(1)——具有索引的List

    前言:因为最近要重新找工作,Collection(集合)是面试中出现频率非常高的基础考察点,所以好好恶补了一番. 复习过程中深感之前的学习不系统,而且不能再像刚毕业那样死背面试题,例如:String是 ...

  5. 手机app微信支付后台处理流程

    第一步:客户在手机app确认订单,提交订单后,app将订单详情传给后台,后台将订单存入数据库,将存入数据库的id返回给app. 第二步:这时候手机端app会让客户选择哪种付款方式,我们做的是微信,所以 ...

  6. Spring源码:IOC原理解析(一)

    版权声明:本文为博主原创文章,转载请注明出处,欢迎交流学习! IOC(Inversion of Control),即控制反转,意思是将对象的创建和依赖关系交给第三方容器处理,我们要用的时候告诉容器我们 ...

  7. [图形学] 习题8.6 线段旋转后使用Cohen-Sutherland算法裁剪

    习题8.6 生成一条比观察窗口对角线还长的线段动画,线段重点位于观察窗口中心,每一帧的线段在上一帧基础上顺时针旋转一点,旋转后用Cohen-Sutherland线段裁剪算法进行裁剪. 步骤: 1 视口 ...

  8. vijos1051题解

    题目: 圣诞老人回到了北极圣诞区,已经快到12点了.也就是说极光表演要开始了.这里的极光不是极地特有的自然极光景象.而是圣诞老人主持的人造极光. 轰隆隆--烟花响起(来自中国的浏阳花炮之乡).接下来就 ...

  9. Chrome浏览器扩展开发系列之八:Chrome扩展的数据存储

    Google Chrome浏览器扩展可以使用如下任何一种存储机制: HTML5的localStorage API实现的本地存储(此处略) Google的chrome.storage.* API实现的浏 ...

  10. JS - 讨论 - 编码习惯 - JavaScript代码到底要不要写分号?

    如题:烦请大家在评论区给出原创意见!多谢!