Go是一款先进的持续集成和发布管理系统,由ThoughtWorks开发。(不要和Google的编程语言Go混淆了!)其前身为CruiseControl,是ThoughtWorks在作咨询和交付交付项目时本身开发的一款开源的持续集成工具。后来随着持续集成及持续部署的火热,ThoughtWorks专门成立了一个项目组,基于Cruise开发除了Go这款工具。ThoughtWorks开源持续交付工具Go,Go的官方网站是http://www.go.cd/,其文档是http://www.thoughtworks.com/products/docs/go/13.3/help/welcome_to_go.html。使用Go来创建起一个项目的持续部署pipeline是很是快的,很是方便。html
Go使用了Server-Agent的模式。Server用来展现和配置pipeline的DashBoard,并存放构建出来的Artifacts(存档文件,好比一个war包); Agent则用来执行真正的构建操做,一个Server能够和多个Agent创建链接,Agent支持多个主流的操做系统。编程
这样的好处是:架构
测试能够运行在不一样的平台上,保证你的软件在多个平台都能良好的工做;编程语言
你能够将测试划分为不一样的群组并并行的运行在多个Agent上,节省运行测试时间;工具
能够方便的管理Agent,及时响应不一样的环境要求。单元测试
下图是Agent工做的生命周期。测试
每一台Go的构建节点机器上都须要安装Go Agent软件(这个名字蛋疼,不是FQ的那个软件),其用来创建起与Go Server的链接。 Go Agent会以轮询的方式来询问Go Server是否有当前有构建工做。若是有的话,Go Server会将其分配给处于ready状态的Agent。该Agent会在本身机器目录上建立一个目录,并下载同步最新的材料(好比配置的SVN repo地址),而后执行指定的task,好比构建项目,运行单元测试或功能性测试等。若是配置了artifacts(好比构建的结果,一个war包),Agent执行完毕后将这个artifacts发布到Go Server上,这样artifacts就会被接下来的stage用到。网站
Go对复杂的构建和部署活动进行了合理的抽象,并提供了GUI和XML两种方式来配置pipeline。ui
在Go的世界中,多个pipeline能够共同组成一个group,这叫作pipeline group。没个pipeline又由多个stage组成。假设一个pipeline须要作以下事情: 构建项目->部署到测试环境->部署到生产环境。那么每个环节均可以设置为一个stage。而一个stage则由1个或多个job组成。好比构建项目这个stage,可能会分为编译及验证->功能性测试,每一步能够做为一个job。job则由一个或多个task组成。好比功能性测试这个job能够分为两个task来完成,先将artifacts部署到测试机上,再运行功能性测试。操作系统
Go在设计之初就是一款持续部署工具,而Jenkins其实只是一款持续集成工具,若是要实现持续部署须要安装相应的插件。 Go和Jenkins都是开源软件,虽然免费,可是出现问题要么本身动手解决,要么等待维护社区修复,Go能够向ThoughtWorks购买支持服务。 Jenkins做为开源产品,社区比较活跃,文档资料和插件都比较多,而Go的文档或资料较少。