Build 过程往往是比较复杂的,因此 TeamCtiy 通过 build 步骤的方式让您可以实现不同的应用场景。您可以在每个 build 步骤中只做一件事情,然后把一系列的 build 步骤组织起来按顺序执行来完成 build 过程。先看一下 build 步骤配置的概览:

每一个 Build 步骤都会对应一个 build runner 在背后完成真正的工作。我们要做的就是构思好 build 的过程,然后通过一系列的 build 步骤去实现它。在 build 的过程中,这些 build 步骤会被一个接一个的顺序执行。当然,您可以通过 TeamCity 提供的 UI 方便的排列您的 build 步骤的顺序。

Build 步骤的执行策略

TeamCity 会根据前一个 build 步骤的返回状态和当前的 build 状态来综合判断是否运行下一个 build 步骤。当满足下面条件时 build 步骤的状态被确定为失败:build 步骤的执行过程返回了非零的退出代码 并且该 build 的失败条件配置为起作用。其它情况则认为 build 步骤的状态为成功。
我们可以在 build 步骤中指定不同的执行策略来告诉 TeamCity 究竟要不要执行下一个 build 步骤:

Only if build status is successful

只有在整个 build 处于成功的状态时才执行该步骤。
在开始运行该 build 步骤前,build agent 会向 TeamCity Server 请求整个 build 的状态,如果 build 的状态已经是失败,则跳过该步骤的执行。

If all previous steps finished successfully

前面所有 build 步骤必须都是成功的。
这种类型不会向 TeamCity Server 发送请求,只分析之前的 build 步骤有没有失败的。

Even if some of previous steps failed

即便前面的 build 步骤有失败的也会执行。
不管之前的 build 步骤是否失败,也不管整个 build 的状态是否已失败,都执行该 build 步骤。

Always, even if build stop command was issued

总是执行,即便是收到了停止 build 的命令也要执行该 build 步骤。
即便是用户在前面的 build 步骤中取消了整个 build 的执行,这个 build 步骤也依然会被执行。但是在这个 build 步骤执行的过程中,如果您取消 build,就可以终止它的执行。

接下来我们会演示如何创建一个命令行类型的 build 步骤。

手动添加 Build 步骤

TeamCity 提供了很智能的 “Auto-detect build steps” 功能,主要是搜索 VCS 目录下的可识别的编译配置文件然后自动生成 build 步骤。这种方式比较简单,我们主要介绍能支持复杂配置的手动配置 build 步骤的方式,所以请选择 “Add build step”。

Runner type

TeamCity 内置支持几乎所有的 build 类型:

我们可以选择自己的项目的 build 类型,当然我们还可以选择更通用的类型:Command Line。它可以执行我们写的脚本,如 windows 中的 bat 脚本和 linux 中的 shell 脚本。哈哈,有了执行脚本的能力还有什么事情做不了呢!
下面我们就来介绍如何创建一个 Command Line 类型的 build 步骤。请选择 Command Line 类型的 Runner type。

Step name

您可以为每一个 build 步骤设置名称。注意,这不是一个必选项,您可以选择什么也不填。

Execute step

请选择合适的执行策略,我们已经在前面详细的解释过了。

Working directory

对于要执行的命令来言,工作目录是非常重要的。如果设置不正确就会发生找不到文件的错误,所以一定要认真设置。您可以手动输入相对于 checkout 目录的路径,也可以通过右侧的工具进行选择。如果您希望工作目录就是 checkout 的目录,那么就不需要进行设置,留空就可以了。

Custom script

当选择 Custom script 类型时,我们可以直接在输入框中写脚本命令。这么做的好处是不用管理脚本文件了,因为 TeamCity 会把您写的脚本命令打包成脚本文件在 build 时执行。

Executable with parameters

如果是一个比较复杂的脚本,我们还是希望把它写成一个单独的脚本文件,这样更好维护管理。此时若是想要向单独的脚本文件传递参数又该怎么办呢?

选择 Executable with parameters 类型,可以执行脚本文件或者是可执行的二进制文件,并且可以传递命令行参数。上图中我们就把 checkout 目录传递给了 test.bat 脚本文件。

创建多个步骤

为了完成复杂的编译过程,往往需要多个步骤按顺序的执行。TeamCity 也提供了让用户可以重新排序 build 步骤的功能。

上图为添加了两个 build 步骤后点击 “Reorder build steps” 按钮的场景。此时build步骤会被列出,您可以用鼠标拖拽进行重新排序。完成后点击 “Apply” 按钮就可以了。

总结

本文并没有挨个的介绍所有 TeamCity 支持的 build 类型,而是介绍了最通用的脚本命令执行方式。因为笔者认为只有脚本方式才能够处理更为复杂的编译场景,属于必须要掌握的最具实用价值的方式!

TeamCity : 配置 Build 过程的更多相关文章

  1. 持续集成工具TeamCity配置使用

    持续集成CI(Continuous Integration)主要包括自动化的编译.发布和测试集成,对于我们信息系统项目开发非常有用.一般开发人员机器上会搭建自己的开发环境,整个项目在服务器上会搭建测试 ...

  2. TeamCity : 配置第一个工程

    前面我们已经创建了TeamCity Server 和一个 Agent,接下来我们为一个.net core 控制台程序配置自动化的编译. 创建 .net core 项目 我们在本地创建一个简单的 .ne ...

  3. Android Studio 的 build 过程

    如图, 编译器将源代码(包括 Application Module 及其所依赖的所有 Library 源代码)转换成 DEX(Dalvik Executable)文件(其中包括运行在 Android ...

  4. (转)Maven的pom.xml文件结构之Build配置build

    在Maven的pom.xml文件中,Build相关配置包含两个部分,一个是<build>,另一个是<reporting>,这里我们只介绍<build>. 1. 在M ...

  5. @vue/cli3+配置build命令构建测试包&正式包

    上一篇博客介绍了vue-cli2.x配置build命令构建测试包和正式包,但现在前端开发vue项目大多数使用新版@vue/cli脚手架搭建vue项目(vue create project-name) ...

  6. Redis主从配置详细过程

    Redis的主从复制功能非常强大,一个master可以拥有多个slave,而一个slave又可以拥有多个slave,如此下去,形成了强大的多级服务器集群架构.下面楼主简单的进行一下配置. 1.上面安装 ...

  7. STM32F0xx_PWR低功耗配置详细过程

    Ⅰ.概述 今天总结PWR部分知识,请看“STM32F0x128参考手册V8”第六章.提供的软件工程是关于电源管理中的停机模式,工程比较常见,但也是比较简单的一个实例,根据项目的不同还需要适当修改或者添 ...

  8. STM32F0xx_EXIT中断配置详细过程

    Ⅰ.概述 EXIT外部中断在使用到按键或者开关控制等应用中比较常见,低功耗中断唤醒也是很常见的一种.因此,EXIT在实际项目开发中也是比较常见的一种. STM32F0中外部中断EXIT属于中断和事件的 ...

  9. STM32F0xx_看门狗(独立+窗口)配置详细过程

    Ⅰ.概述 对于看门狗,我觉得做单片机或者嵌入式开发的人员来说并不陌生,今天总结STM32F0看门狗的功能,F0的看门狗有两种:独立和窗口看门狗. 今天提供两种看门狗的软件工程实例,供大家下载. 两种看 ...

随机推荐

  1. 谈谈一些有趣的CSS题目(七)-- 消失的边界线问题

    开本系列,谈谈一些有趣的 CSS 题目,题目类型天马行空,想到什么说什么,不仅为了拓宽一下解决问题的思路,更涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题 ...

  2. [C#] 简单的 Helper 封装 -- RandomHelper

    using System; namespace Wen.Helpers { /// <summary> /// 随机数助手 /// </summary> public seal ...

  3. css居中div的几种常用方法

    在开发过程中,很多需求需要我们居中一个div,比如html文档流当中的一块div,比如弹出层内容部分这种脱离了文档流等.不同的情况有不同的居中方式,接下来就分享下一下几种常用的居中方式. 1.text ...

  4. 【知识必备】RxJava+Retrofit二次封装最佳结合体验,打造懒人封装框架~

    一.写在前面 相信各位看官对retrofit和rxjava已经耳熟能详了,最近一直在学习retrofit+rxjava的各种封装姿势,也结合自己的理解,一步一步的做起来. 骚年,如果你还没有掌握ret ...

  5. MongoDB集群配置

    本文演示:(一个主服务器,一个备份服务器,三个仲裁服务器) 官方推荐副本集的成员数量为奇数,最多12个副本集节点,最多7个节点参与选举. 本文演示基于本机,用端口区分服务(每个服务器下新建db文件夹用 ...

  6. APEX:对object中数据进行简单处理?

    在Salesforce中,常常要对各种数据进行处理,已满足业务逻辑.本篇文章会介绍如何实现从object获取数据,然后将取得的数据进行一系列简单处理. 第一步:SongName__c 是一个新建的ob ...

  7. exp/imp 与 expdp/impdp 区别

    在平常备库和数据库迁移的时候,当遇到大的数据库的时候在用exp的时候往往是需要好几个小时,耗费大量时间.oracle10g以后可以用expdp来导出数据库花费的时间要远小于exp花费的时间,而且文件也 ...

  8. 浅析SQL查询语句未显式指定排序方式,无法保证同样的查询每次排序结果都一致的原因

    本文出处:http://www.cnblogs.com/wy123/p/6189100.html 标题有点拗口,来源于一个开发人员遇到的实际问题 先抛出问题:一个查询没有明确指定排序方式,那么,第二次 ...

  9. Spring MVC初始化参数绑定

    初始化参数绑定与类型转换很类似,初始化绑定时,主要是参数类型 ---单日期 在处理器类中配置绑定方法  使用@InitBinder注解 在这里首先注册一个用户编辑器 参数一为目标类型   proper ...

  10. 史上最全Windows版本搭建安装React Native环境配置

    史上最全Windows版本搭建安装React Native环境配置 配置过React Native 环境的都知道,在Windows React Native环境配置有很多坑要跳,为了帮助新手快速无误的 ...