允许用户配置 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. thinkphp中find()和select()的区别

    1.find()是查找符合条件的第一条数据,返回的是一个一维数组: select()是查找符合条件的所有的数据,返回的是一个二维数组: 2.以下案例 $tech=M('techlevel','HR_C ...

  2. 前端UI组件复用工具

    "懒"是第一生产力. 代码复用总是程序员喜闻乐见的,前端组件化的最终目的就是复用,今天我们就将深入探讨如何实现UI组件的复用. 通常我们所说的组件往往是包含业务逻辑的前端组件,而这 ...

  3. ASP.NET初始化流程分析2

    上一篇讲了从创建应用程序域到创建ISAPIRuntime实例的过程,本篇继续讲Asp.net处理第一次请求的必要的初始化过程. ISAPIRuntime分析 ISAPIRuntime在System.W ...

  4. linux下修改Apache配置文件

    linux下修改host文件host文件存放路径 /etc/hosts 可以用vim编辑 //Apache配置虚拟主机 /usr/local/apache/conf/extra/httpd-vhost ...

  5. 关于ZendStudio 10.5的破解 包括mac

    一. 下载ZendStudio 10.5 首先下载ZendStudio 10.5 我使用的是mac版 下载地址是: http://downloads.zend.com/studio-eclipse/1 ...

  6. 查看java线程cpu占用情况的脚本

    #!/bin/bash [ $# -ne ] && exit jstack $ >/tmp/jstack.log -o THREAD,tid,time|sort -k2nr| s ...

  7. TCP/IP三次握手,四次断开

    在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接. 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认: SYN: ...

  8. 鼠标滚轮图片放大缩小功能,使用layer弹框后不起作用

    今天在项目中遇到的一个问题:点击按钮使用layer弹框弹出一张图片,需要加一个鼠标滚轮放大缩小,图片也跟着放大缩小的功能.于是在网上找了一个demo. DEMO: <!DOCTYPE html ...

  9. 使用react-router setRouteLeaveHook的钩子函数

    今天在使用react-router setRouteLeaveHook的钩子函数,不知道怎么实验就是成功.最后功夫不负有心人,终于让我找到使用setRouteLeaveHook的方法了 1.我在网络上 ...

  10. pouchdb-find( pouchdb查询扩展插件 ,便于查询)

    pouchdb-find pouchdb-find 环境搭建 下载lib bower install pouchdb-find 引入js <script src="pouchdb.js ...