BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

所有的团队都应该使用自动构建吗?

| 作者 Jonathan Allen 关注 530 他的粉丝 ,译者 邵思华 关注 3 他的粉丝 发布于 2013年7月30日. 估计阅读时间: 10 分钟 | 如何结合区块链技术,帮助企业降本增效?让我们深度了解几个成功的案例。

我们与Team Foundation Server的高级项目经理Chris Patterson讨论了在现代化应用程序开发中,自动构建与持续交付所扮演的角色。Team Foundation Service是由Microsoft托管的Team Foundation Server。

InfoQ:你是否觉得所有的团队都应该使用自动构建?如果答案为是,为什么?如果为否,那么在何种环境下能体现出它的重要性呢?

Chris简短的回答是:是的,所有团队都应该使用。首先,我想区分一下代码编译与构建。我认为一个构建应该起码包含运行你的单元测试,否则的话就仅仅是代码编译而已,而这仅针对那些无法通过编译的项目才能起到作用。随着HTML5和JavaScript越来越多地被项目所采用,甚至使用在原生的Windows应用中,单纯的编译步骤已无法给你初级的反馈了。因此,单元测试现在成为了你和你所引入的bug之间的第一道防线。我甚至建议只有一个人的团队也要搭建自动构建系统。

记着这一点,你会发现使用自动构建的诸多好处。

首先它为流程的规范化带来好处。自动构建促使开发者或开发团队在创建软件的同时建立并维护一个可重复的、文档化的流程。多数开发者都在不同场合被“在我的机器上能够运行”这种bug所困扰。典型的原因是因为开发者工作机上的某些依赖项没有安装在测试或者客户环境上。持续的、可重复的自动构建流程能促使团队保证他们的软件在IDE和开发者工作机之外也能够编译并运行基本的单元测试集,这有效地避免了上述bug的发生。

除此之外,自动构建也有助于发现及突出一些其它常见问题:

  • 某个开发者的签入破坏了构建
  • 某个开发者忘了签入某个重要文件或者配置变更
  • 你的构建脚本不能运行,或者你的软件不能通过单元测试了

关于软件工程流程中自动构建的重要性的好文章有很多,Martin Fowler就有一个极好的例子。

InfoQ:你是否认为要想成功应用自动构建,必需了解如何编写MSBuild脚本?

ChrisMSBuild是一门创建自动构建脚本的技术,也在Visual Studio中使用。从这个角度来看,如果你使用Visual Studio进行工作,你应该熟悉MSBuild并了解如何编写脚本。

.NET社区中还流行着其它一些构建脚本工具,例如NAnt和PSake等等。我个人对它们虽然并不十分精通,不过我的确知道大家对它们热情十足。

我们在Team Build中组合使用了MSBuild和Windows Workflow。MSBuild用来处理Visual Studio解决方案和项目文件,我们用它进行代码自动编译。从TFS中获取你的代码,执行MSBuild,运行单元测试并将结果写回TFS这一整套流程则是由Windows Workflow Foundation完成的。这种组合建立了一个非常强大而灵活的系统,开发者可以利用它实现完全的自动化,包括构建、测试环境管理甚至是生产环境的部署。

不过,如果你使用其它技术,那么你就需要了解如何运行它的构建系统。

InfoQ:你觉得TFS在怎样的自动化部署(例如持续交付)场景中表现得特别优秀或者糟糕?

ChrisTeam Build的一大优势是你可以做任何想做的事,但这也可能是它最大的弱点。Windows Workflow运行时功能非常强大并且适用。不过这对开发者而言意味着一定的学习曲线。对这个平台有所钻研并真正了解它的人能完成连我们都想象不到能为客户实现的功能,而对于不了解WF的开发者来说,即使是简单的构建定制也会是一个挑战。这意味着,Team Build对于任一种自动化部署机制都是一个好的选择,但对开发者来说未必能马上了解如何使用它实现目标。

为了改善开发者在持续交付方面的体验,我们和Azure团队合作,提供了从Team Foundation Service到Windows Azure之间一个无缝的持续交付工作流。只需数次点击,开发者就能够将他们的Team Foundation Service帐号与他们的Azure订阅连接起来。这个流程同时还创建了一个预配置的构建定义,能够将web网站或云服务部署到该订阅中。开发者所要做的只是在他们的解决方案中指明该构建定义,其余的部分都将由我们完成。

今后,我们期待将更多的此类方案提供给Team Foundation Service的客户,以及在内部的防火墙中搭建TFS的客户。

InfoQ:有人主张持续交付不仅仅针对QA,也可以应用到生产环境本身。这意味着,一旦自动化测试通过,它就会在没有任何人工干预的情况下自动部署到生产环境。你对这个观点的看法是什么?

Chris我非常提倡为QA实现持续交付,我认为能够将可运行的产品及变更交付给你的测试人员,是提高你的团队速率及软件质量最好的方法之一。再有,如果你都不能为QA实现持续交付,那更不可能应用到生产环境上。

为生成环境实现持续交付在某些地方正在流行起来,我相信对某些类型的业务和产品来说这是个长远之计,但对其它业务和产品就未必适用。它对开发者的自律性有着极高的要求,并且对你的自动构建要有足够的自信,确保它能够捕获任何类型的错误,而不让问题发布到客户那里。

InfoQ:对比那些独立的构建服务器,例如CruiseControl,你觉得使用TFS构建agent的优势是什么?

Chris主要的优点在于其集成度。Team Build是TFS的一部分,在安装包和service中都有提供,这意味着你拥有了整套设计的方案。如果你遇到任何问题,我们也将为你提供世界级的支持。Team Build包含了一套预配置的模板,支持Visual Studio解决方案和Visual Studio test runner,这使开发者能在几分钟内轻松上手并运行构建。对于Team Foundation Service来说,开发者甚至不需要安装构建agent。我们为service提供了构建agent,能够构建绝大多数你能在Visual Studio中创建的项目。

当然,独立产品的一个优势就是来自社区方面的众多支持。CruiseControl或Jenkins等工具有着丰富的插件,以提供不同的功能。另外,它们的agent都能够运行在Linux和MacOS平台上。我们有许多客户同时使用Team Build和独立的构建服务器。所有Windows平台上的产品使用Team Build,而运行在其它平台上的产品使用独立的构建服务器。

InfoQ:是否有计划推出Java、iOS及Android平台上的构建agent?

Chris在这个新平台不断出现的软件开发世界,我们将持续改善在其它平台上的功能。

我们提供了一系列的工作流activity以及MSBuild任务,以允许你使用在Java社区中非常流行的Ant和Maven实现自动构建。实际上,我们在内部构建Team Explorer Everywhere产品时也使用了这些用Java编写的activity。由于Android开发环境同样基于Eclipse和Java,我们也可以使用相同的技术。

目前,iOS应用还只能在Mac上开发,而我们还没有能够运行在Mac上的agent。

关于作者

Chris Patterson是参与Team Foundation Server开发的高级项目经理,他在软件行业已工作了15年,有着多种技术的工作经验,包括经典的ASP、VB、Java及.NET。在2005年加入Microsoft之前,他就职于TogetherSoft及Borland,通过指导和培训帮助客户改进他们的软件开发流程。在Microsoft,他负责Visual Studio 2008及2010中负载、web及手动测试的特性,目前他负责Team Foundation Server和Team Foundation Service中的构建自动化组件的工作。他乐于帮助客户解决问题,阅读和学习技术和陪伴家人。你可以在Twitter中通过@chrisrpatterson,或者在产品论坛中找到他。

 

查看英文原文:Chris Patterson on Automated Builds in TFS


感谢杨赛对本文的审校。

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ)或者腾讯微博(@InfoQ)关注我们,并与我们的编辑和其他读者朋友交流。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

by lise lie

www.east-tools.com

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

1 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT