TFS Build Definition
1. TFS Build 简介
在团队项目开发中,编译常常是一个很困难的事情!
可能你会反问编译有什么难的?不就是右键,然后点击 Build/Rebuild, 或者直接按 F5 么?这都不会,真不知道你是怎么混的!强烈鄙视之!
不急,我们慢慢的探究一下个中真味。首先,我们都同意在团队开发中,源代码的版本管理是必要且重要的。
那么如果我们要实现一下功能,可就不轻松了?
- 确保每个程序员提交的代码都是可编译的,也就是说如果最新代码不能编译则不能提交。
- Daily Build/Weekly Build (每日/周的编译) , 我们希望可以每天编译出最新的代码,然后放到一个共享目录下,以方便测试团队进行 Smoking Test以确保核心功能不受影响,并且根据最新功能设计,实现测试用例 (Test Case).
- 在不同的平台上进行编译,可能某些程序(依赖于比较老的 COM)只能在x86平台上运行,有些却没有要求。
- 要求在Build 时运行单元测试用例,确保基础性的方法(Method)可以工作或者流程性功能(Business logic)正确实现。
实际编译中的问题可能远远超出了上述情况且项目规模越大编译难度越大,这也就为什么大的项目都有专门的编译/部署人员/团队。比如我曾经经历过一个 C++项目,需要在将近48个非 Windows(Non-Windows) 平台上每天进行编译以便进行测试,如果没有自动化的机制,恐怕需要的编译人员要比开发人员还多。
面对这些编译工作中的挑战,TFS 提供了Build Process 并且提供了模版。这些可以帮助我们解决 Build 过程中的很多问题。
那么就让我们开始揭开 TFS Build的什么面纱吧!
2. TFS Build 架构图

3. TFS Build 流程图

4. 创建 TFS Build 定义
首先你必须有权限创建一个Build 定义,并且通过Visual Studio 2012/2010 连接到TFS 服务器。
- 右击 Team Explorer, 点击 Builds

- 点击 New Build Definition

- 在 Build definition name 框中输入一个名字,并且在Description 中给予简单的描述。

- 对于Queue Processing,如果此 Build Definition 没有准备好发布给 team 使用,那么你可以把它的状态由 Enabled 改为:
- Pause: TFS 将新的Build 请求加入到队列中,并且把其状态标识为 Pause.
- Disabled: TFS 将拒绝新的Build 请求加入队列中。
- 点击 Trigger 标签,在此标签页中设置触发此 Build Definition 的事件,对其设置选项做一下解释:
- Manual – Check-ins do not trigger a new build--手动执行。最原始也是最保险和有效的方式。

- Continuous Integration – Build each check-in--持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽快地发现集成错误。许多团队发现这个过程可以大大减少集成的问题,让团队能够更快的开发内聚的软件。使用该选项,每次提交/签入代码都会把一个新的 Build 加入队列,这种通常使用与向TFS Server 提交完成某个或某几个模块功能,试想一下如果你只是改了一个 if 的条件,提交代码却出发整个Build 过程多不划算在实际操作中通常用户由 TFS branch 向主干(trunk) 提交代码时。此提交过程通常是由专门人员完成而不是每个程序员,这样做可以减少因认为操作而引起的风险。

- Rolling Builds – accumulate check-ins until the prior build finishes--同Continuous Integration 类似,当 Continuous Integration 提交代码等待时间过长(通常都很长),使用该选项。采用此选项时,如果当前没有 Build 在运行,则启动 Build, 在Build 结束后,把在Build 运行期间所有的 check-in 累积到下一个 Build 时运行。并且可以对 Build 频率进行限制,勾选并填写来制定运行频率 Build no more often that every _0~214748367_ minute,在本示例里我们设置每个小时运行一次Build。

- Gated Check In – accept check-ins only if the submitted changes merge and build successfully。采用此选项确保项目编译成功。如果你提交的代码导致项目编译失败则 TFS server 将拒绝你提交代码。Get Latest Code 开开心心的 Coding, 可是你却发现项目Build 失败了,然后一堆的红色错误让你心情烦躁,于是你花了半个小时让他可以 Build 成功,可是那个改代码的哥们来了以后说你不能改,因为你影响了他的代码功能。多么糟糕的一天,大大影响了工作效率,于是乎下班不能回家打游戏只能加班了。所以采用此选项确保代码可以编译,大家各自完成各自的功能,互不干扰。

- Schedule -- build every week on the following days。首先来认识一下大名鼎鼎的BVT(Build Version Test),它是一个常规的 test 用来评估代码编译的质量,通常只包含对核心功能,基础功能进行测试的代码,也可以认为是对一个Build 的 Smoking Test。使用此选项可以帮助你自动的在你睡觉的时候完成 Build 和运行 BVT test suites/cases。省时省力省钱。

- 点击Source Setting 标签页,设置要Build 的项目为Active。

- 点击 Build Defaults 选项卡, 设置 Build Controller 和设置 Build 的文件所放的位置。

- 点击 Process,定义 Build 的项目,项目设置,Test Run, Build Agent 的设置等。

- 点击 Retention Policy, 设置你想要保留的 Build 的个数和信息。

- Ctrl + S 保存。
TFS Build Definition的更多相关文章
- TFS Build Definition And Auto Deploy
一台build machine上一般只有一个build service[对应一个build controller]来serve一个team project collection,但又workaroun ...
- 如何用TFS build definition添加自动建立nuget package 步骤
参考网址:https://www.visualstudio.com/en-us/docs/build/steps/package/nuget-packager https://docs.nuget.o ...
- TFS Build做Web应用持续集成发布的一个技巧
由于面向接口编程的关系,许多实现往往是动态注入运行,在一个项目中直接引用实现dll编译是不合理的.通常我们会在Post Build Event中添加一些xcopy命令将运行时才需要的dll复制到输出目 ...
- TF42064: The build number already exists for build definition error in TFS2010
In TFS2008, deleting a build removes it from the database itself. If you delete a build called Build ...
- TFS Build Silverlight项目的两个问题
1.The Silverlight 4 SDK is not installed. 打开对应的Build Definition,Process -> Advanced -> MSBuild ...
- xeam Build Definition Extension uninstall 卸载
之前在VS上装了Build definition 的扩展,后来发现很不好用,想卸载掉,就增 工具下面找add-in manager, 结果找不到,external tools下面也找不到, googl ...
- TFS build server搭建,搭建自动化构建服务器
TFS build 服务器的搭建主要步骤如下: 一:环境准备: 新建一台build服务器 安装Visual Studio.主要目的是: a. 生成Build脚本所需要的build命令:b.与TFS组合 ...
- TFS2010单独安装配置tfs build server
记录一下确实很磨人. 同样硬件和软件环境的两台服务器,其中一台服务器很久之前就配置好了tfs2010 build ,然后最近想再配置一台tfs build server,但是按照以前的配置流程始终提示 ...
- 集成TFS Build生成与SonarQube获取代码分析结果
软件项目在开发过程中,往往由于任务重.时间紧等原因忽略软件代码的质量和规范检查,只注重软件功能的开发和交付.等软件交付上线以后,由于代码质量导致的问题会耗费开发和运维人员的大量时间.研发表明,项目上线 ...
随机推荐
- Ubuntu 13.04下安装Vmware tools 9.2.3
更新13.04后 VmwareTools安装会出现三个问题 找不到generic kernel headers头文件 编译vmci出错 编译vmhgfs出错 第一个问题是系统的文件位置换了,而VMTO ...
- HTML5新元素
<figure> 标签规定独立的流内容(图像.图表.照片.代码等等). <figure> 元素的内容应该与主内容相关,同时元素的位置相对于主内容是独立的.如果被删除,则不应对文 ...
- android 应用开发对大图片的处理
一,下载 android下载大图片(例如微博长图片)会出现OOM down掉问题 解决这个问题的办法是下载图片时先得到图片的宽度和高度,如果超出规定限制则对图片进行缩放 关键参数 1. BitmapF ...
- Oracle EBS-SQL (WIP-3):检查非标任务子件没选MRP净值.sql
SELECT WE.WIP_ENTITY_NAME, MSI.SEGMENT1, MSI.DESCRIPTION, WDJ.CLASS_CO ...
- C语言入门(21)——使用DBG对C语言进行调试
C语言入门(21)--使用DBG对C语言进行调试 程序中除了一目了然的Bug之外都需要一定的调试手段来分析到底错在哪.到目前为止我们的调试手段只有一种:根据程序执行时的出错现象假设错误原因,然后在代码 ...
- Java中,当表单含有文件上传时,提交数据的如何读取
http://blog.csdn.net/lian_zhihui1984/article/details/6822201
- Android上运行本地c
在android代码中编译一个可执行文件,主要功能是对文件的读写, 简单贴出来: #include <errno.h> #include <stdio.h> #include ...
- LInux 下安装jdk
安装jdk版本为1.6.0_12 一.下载jdk 下载地址:http://download.java.net/jdk6/ 选择Linux Platform jdk-6u12-linux-i586.bi ...
- req.xhr在express中的应用
req.xhr判断请求来自ajax还是普通请求: 若为ajax则是为true 这个属性是通过判断headers中的 x-requested-with的值来判断的 下面是来自ajax的请求: 1 hos ...
- hdu 1011 Starship Troopers (树形背包dp)
本文出自 http://blog.csdn.net/shuangde800 题目链接 : hdu-1011 题意 有n个洞穴编号为1-n,洞穴间有通道,形成了一个n-1条边的树, 洞穴的入口即 ...