1.  TFS Build 简介

在团队项目开发中,编译常常是一个很困难的事情!

可能你会反问编译有什么难的?不就是右键,然后点击 Build/Rebuild, 或者直接按 F5 么?这都不会,真不知道你是怎么混的!强烈鄙视之!

不急,我们慢慢的探究一下个中真味。首先,我们都同意在团队开发中,源代码的版本管理是必要且重要的。

那么如果我们要实现一下功能,可就不轻松了?

  1. 确保每个程序员提交的代码都是可编译的,也就是说如果最新代码不能编译则不能提交。
  2. Daily Build/Weekly Build (每日/周的编译) , 我们希望可以每天编译出最新的代码,然后放到一个共享目录下,以方便测试团队进行 Smoking Test以确保核心功能不受影响,并且根据最新功能设计,实现测试用例 (Test Case).
  3. 在不同的平台上进行编译,可能某些程序(依赖于比较老的 COM)只能在x86平台上运行,有些却没有要求。
  4. 要求在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的更多相关文章

  1. TFS Build Definition And Auto Deploy

    一台build machine上一般只有一个build service[对应一个build controller]来serve一个team project collection,但又workaroun ...

  2. 如何用TFS build definition添加自动建立nuget package 步骤

    参考网址:https://www.visualstudio.com/en-us/docs/build/steps/package/nuget-packager https://docs.nuget.o ...

  3. TFS Build做Web应用持续集成发布的一个技巧

    由于面向接口编程的关系,许多实现往往是动态注入运行,在一个项目中直接引用实现dll编译是不合理的.通常我们会在Post Build Event中添加一些xcopy命令将运行时才需要的dll复制到输出目 ...

  4. 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 ...

  5. TFS Build Silverlight项目的两个问题

    1.The Silverlight 4 SDK is not installed. 打开对应的Build Definition,Process -> Advanced -> MSBuild ...

  6. xeam Build Definition Extension uninstall 卸载

    之前在VS上装了Build definition 的扩展,后来发现很不好用,想卸载掉,就增 工具下面找add-in manager, 结果找不到,external tools下面也找不到, googl ...

  7. TFS build server搭建,搭建自动化构建服务器

    TFS build 服务器的搭建主要步骤如下: 一:环境准备: 新建一台build服务器 安装Visual Studio.主要目的是: a. 生成Build脚本所需要的build命令:b.与TFS组合 ...

  8. TFS2010单独安装配置tfs build server

    记录一下确实很磨人. 同样硬件和软件环境的两台服务器,其中一台服务器很久之前就配置好了tfs2010 build ,然后最近想再配置一台tfs build server,但是按照以前的配置流程始终提示 ...

  9. 集成TFS Build生成与SonarQube获取代码分析结果

    软件项目在开发过程中,往往由于任务重.时间紧等原因忽略软件代码的质量和规范检查,只注重软件功能的开发和交付.等软件交付上线以后,由于代码质量导致的问题会耗费开发和运维人员的大量时间.研发表明,项目上线 ...

随机推荐

  1. 利用R语言打造量化分析平台

    利用R语言打造量化分析平台 具体利用quantmod包实现对股票的量化分析 1.#1.API读取在线行情2.#加载quantmod包3.if(!require(quantmod)){4. instal ...

  2. IE9下Ajax缓存问题

    使用jQuery的getJSON从后台定时获取数据并刷新界面,使用以下方法时,在Chrome,Firefox下没问题,但在IE9下却无法刷新数据 $.getJSON(webApp + "/G ...

  3. mudOS配置

    # 本泥巴的名称name : new夕阳再现# 定义用来接受玩家连线的端口#单端口 port number : XXXX#双端口如下:external_port_1 : telnet 10010ext ...

  4. Elevator

    问题陈述: 杭州电子科技大学 HANGZHOU DIANZI UNIVERSITY Online Judge Problem - 1008 问题分析: 简单题. 代码详解: #include < ...

  5. python计算md5值

    from hashlib import md5 m = md5(') print m.hexdigest()

  6. Oracle EBS-SQL (PO-2):检查当月到货补单的记录数.sql

    SELECT          DECODE(PLLA.FROM_LINE_ID,'-1','手工','','自动创建') 下达方式,          rsh.receipt_num         ...

  7. 手工制作OTG连接线 让小白实现OTG功能

    说到OTG功能,很重要的一点是,现在不少网上的720P高清视频体积已经超过4GB,我的小白也支持exFat及NTFS磁盘格式,可存储播放大于4GB的高清影音文件,也能通过OTG读取播放NTFS格式U盘 ...

  8. cdoj 791 Frozen Rose-Heads

    //本来想做白书上一题 结果发现又要二染色 又要dp的 想了两个小时没想通 然后做了个傻逼题安慰自己 解:不多说,就是递归到叶节点,然后回来的时候在解决子树和直接删边的代价中间取个最小值 #inclu ...

  9. javascript时间处理方法收集

    首先收集到的是一个给某一个时间对象增加一段时间的方法, 例如2026-05-11增加一个月的时间,增加后时间为2026-05-11, 代码如下: function DateAdd(interval,n ...

  10. PHP和JAVASCRIPT判断访客终端是电脑还是手机

    当用户使用手机等移动终端访问网站时,我们可以通过程序检测用户终端类型,如果是手机用户,则引导用户访问适配手机屏幕的移动站点.本文将介绍分别使用PHP和JAVASCRIPT代码判断用户终端类型. PHP ...