ThoughtWorks 开源持续交付工具 Go

  • Abel Avram
  • 马德奎

2014 年 3 月 10 日

话题:持续集成ThoughtWorksDevOps持续交付文化 & 方法

近日,ThoughtWorks 开源了名为Go的持续交付(CD)工具。它的前身是CruiseControl,提供了一个覆盖整个代码开发过程——持续集成、测试和部署——的管道式过程。

尽管Go 的 GitHub 账户还在等待接收源代码,但开发人员已经可以获取可用于 Windows、Mac OS X、Linux、Solaris 或者是作为一个 Java JAR 包提供的二进制安装文件,既有服务器端,也有代理。

为了了解更多有关 Go 的计划,InfoQ 采访了 ThoughtWorks Studios 开源项目经理 Ken Mugrage。

InfoQ:是什么使 Go 富有吸引力?

从管道概念发展而来的为构建 / 测试 / 部署过程建模的能力。既然 Go 的构建目的是成为一款持续交付工具,所以这是该产品的核心概念。以管道作为最重要的概念,并管理依赖关系,只要“操作正确”,即使是最复杂的工作流程也不难建模。许多其它产品也试图设计上同样的功能,但通常虚有其表,或者是插件使它看起来像管道。

InfoQ:跟我们聊一些 Go 的历史吧。

2007 年,Go 最早是作为一款名为“Cruise”的商业产品创建。创建它的团队很快就意识到,以前的持续集成解决方案的架构,无法支持我们实现网格和构建、测试、部署流程所要采用的方式。这使我们决定创建一个全新的商业产品。后续版本见证了产品在这两个特性上的发展,并具备了支持大型构建场和多个大型团队的能力。我们的 2.0 产品更名为 Go,包含了在整个网格上运行大型验收测试套件的功能,并能够反馈目前哪些测试中断了以哪次检入中断了它们。在当时的商业 CI 工具中,这是我们独有的功能。

InfoQ:为什么开源 Go?

简单地说,我们已经得出结论,这样做是正确的。作为一家企业,ThoughtWorks 致力于推广可靠的技术实践。事实上,我们的三大指导原则(我们称之为支柱)中有这样一条,“推动 IT 改革,追求软件卓越”。我们将开源 Go 产品看作是推广可靠的持续交付实践的一个重要方式。

另外,越来越多的业内人士希望,作为平台或基础设施一部分的任意软件都是开源的。其中有各种原因:期望更高的安全性 & 健壮性、能够捐助、丰富的社区,坦白地讲,还有使用成本。鉴于 Go 是数据中心的重要组成部分,许多人将它看作基础设施。我们的客户使用 Go 协调他们所有应用程序的整个构建和部署周期。

InfoQ:为了实现完全自动化的部署管道,Go 需要集成其它什么工具吗?

这个问题确实有点难以回答。Go 本身不需要任何东西,因此,这样一个清单将由用户的构建 / 测试 / 部署周期决定。

Go 协调众多的移动部件,包括推动软件由代码编写进入用户可以访问的生产环境。Go 监控版本控制系统或者包存储库的变化。当检测到变化,它就会运行构建 / 测试 / 部署周期所需的其它工具,其中包括构建管理器,如 Apache Ant、Apache Maven、Microsoft MSBuild;自动化测试工具,如 Selenium、Twist、Cucumber;基础设施管理工具,如 Chef、Puppet 等,还有许多。Go 可以运行任何可以从命令行运行的东西。

InfoQ:你们会继续开发 Go 的商业版本吗?你们还会继续提供支持吗?

我们会为 Go 提供商业插件和专业支持。插件将由需求决定,但它们会是诸如这样的东西,比如,对于非常大型的部署,能够连接到外部数据库(内部用的最多的是嵌入式数据库)来提升性能。

我有幸已经跟我们现有的大部分客户介绍了新模型,而且我想告诉你,无一例外,他们都很满意。

Go 是一款既可以在本地又可以在云上安装的 CD 工具,而 ThoughtWorks 还提供了另外一种名为Snap的持续交付解决方案,这是一款托管的 CD 工具。Go 可以扩展到数百台机器上的自动化 CD 过程;而 Snap 则是一款精简的工具,面向部署“需求更简单的应用程序”,Badrinath Janakiraman 这样说道。他是 Snap 的产品负责人,他还说“这不是说一个更简单的应用程序,而只是说一个更简单的测试 / 部署模型。”

Janakiraman 说,与 Go 相比,Snap 的优势在于“Snap 使‘无服务器的’组织(从源代码到应用程序的所有一切都托管在 SaaS & PaaS 服务上)能够以最小的工作量开始 CD 过程。一旦团队已经习惯设计按需发布的应用程序,随着部署需求越来越复杂,他们可能会选择弃用 Snap。”

Snap 可以用于 Java、Ruby、Python、JavaScript & Node.js 项目的持续集成,支持多种数据库——Sqlite3、PostgreSQL、MySQL、Redis、CouchDB、MongoDB——通过 Capybara、Selenium、PhantomJS 进行测试,并部署到 Heroku 或者 AWS 上。其它构建 / 测试 / 部署配置可根据要求支持。

查看英文原文:ThoughtWorks Open Sources Go, a CD Tool

持续集成ThoughtWorksDevOps持续交付文化 & 方法