微软完全重写了 Team Foundation Server 和 Visual Studio Online 的构建服务器,新工具不再使用大量基于 XAML 的 Windows 工作流文件作为构建定义。
这次重写主要解决以下问题:
- 如果不学习工作流基础知识,则无法添加构建后自定义脚本
- 构建服务器不支持非 Windows 平台,不能用来构建 iOS app
- 要想构建 Java 程序,必须学习 MSBuild 和另外一项技术
- 只有最新版 Visual Studio 才能编辑构建模板
- 大量恼人的 XAML。新的构建定义不再使用含有大量 XAML 的 Windows 工作流文件。
- 不能通过 Web 页面或在非 Windows 机器上编辑构建定义
为了解决这些问题,微软的新构建服务器遵循了这些关键原则:
- 不再创造一个新的构建 / 自动化领域特定语言。如果你正在使用 MSBuild、Ant 这些构建工具,那么你可以继续使用他们。
- 支持非 Windows 平台。
- 构建系统必须具有良好的扩展性。
- 不应该隐藏日志记录
Visual Studio Online 中的新特性
可以直接在浏览器中创建并修改构建定义,从此不需再为调整构建文件而打开沉重的 Visual Studio。
构建定义经常需要访问不想告知他人的机密内容,例如产品密钥、安全 token,现在你可以在构建定义中使用加密变量保护这些机密。
构建定义不再被直接定义为一个分支。你创建定义后,可以使用构建定义标记将被构建的分支,每一个分支可以拥有它们自己的触发器(CI,daily 等)。
当使用诸如 git-flow 的工作流时,最终你往往会创建一堆特性分支。在这个新模型下,你可以在构建定义中使用通配符。举个例子,你可以定义:任一匹配“feature-*”的分支将自动被编译并运行测试,而“qa-*”分支只进行每日构建。
构建工具可以直接运行 PowerShell 脚本。这对 Azure 来说尤其重要,Azure 的部署大部分由 PS 文件来处理。构建过程能够检查你的 Azure 订阅帐号,确保部署程序运行在正确的上下文中就变得更容易了。
一旦部署了一个网站,构建自动化可以启动一个“快速性能测试”,亦即基于 Visual Studio/TFS 中的负载测试功能,运行一个初步的冒烟测试来确保部署成功。
跨平台和测试
除了在 OS X 上构建之外,现在可以在 OS X 上的构建自动化中集成测试程序,生成一个 JUnit 格式的测试结果,继而被导回到构建服务器中并显示。
构建自动化也支持 Xamarin 测试云,你可以选择一些测试细节,例如:从 Visual Studio Online 直接选择你感兴趣的设备 / 操作系统。
VSO 支持多种单元测试框架。
跨平台构建代理基于 Node.js 和 xplat。
可扩展性
以环境变量的方式暴露关键信息,例如:构建版本号。任何脚本语言都可以读取环境变量获得这些信息。
当新版本构建工具发布的时候,构建代理可以自动升级。
开源所有开箱即用的任务,尚未决定是否允许第三方为 OOB 贡献代码。
在 Windows 平台用 PowerShell 编写任务,在其它平台上用 xplat 和 JavaScript 编写。
体系结构
新的构建服务器依然支持基于 XAML 的构建定义。
构建代理移除了一大败笔——单一的物理控制器。
代理被分为许多池,每个池被配以集合并受到池级保护。消除了管理个别构建代理的必要性。
安全性
目前的构建代理运行在一个共享进程中。这意味着一旦构建失败将影响到整个构建代理,甚至一个打开的文件句柄都会让整个过程终止。
在新构建代理模型中,每个构建运行在自己的进程下。当一个构建完成时,进程被完全销毁,并创建一个新的进程来执行下一个构建。
在大多数构建系统中都有一个相对未知的安全黑洞——“单元测试后门”。开发者可以通过写单元测试来捕获敏感信息,然后用于获取严格保密的信息。为了帮助开发者减轻这方面的风险,构建代理绑定了一个时间限制 token,一旦构建完成立即失效。
想了解更多有关构建自动化新特性的信息,欢迎查看 Channel 9 的现场演讲《 Team Foundation Server 和 Visual Sdudio Online 中的新一代构建自动化》。
查看英文原文: New Build Automation Features in Visual Studio Online
感谢邵思华对本文的审校。
给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ , @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群)。
评论