持续集成工具调研

本文对比了多种CI/CD工具,如Jenkins、TeamCity、TravisCI等,分析了各自的优缺点,适合的企业场景,以及与GitLabCI的详细对比,帮助读者选择最适合的持续集成/持续部署解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.什么事CI/CD

大师Martin Fowler认为持续集成是一种软件开发实践,在实践中团队开发成员会频繁的进行任务的集成,通常每个成员每天都会集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建来验证,从而尽快地发现集成错误,快速进行修复。

持续集成(Continuous Integration)、持续部署(Continuous Deployment)也有分为持续集成(Continuous Integration)、持续交付(Continuous Delivery和持续部署(Continuous Deployment)The Product Managers' Guide to Continuous Delivery and DevOps 这个文章做了详细的解释,引用其中的图片解释下这三个概念

Continuous Integration (CI)(持续集成)

多个开发人员同时开发一个项目,代码提交到同一个仓库,并进行构建、执行单元测试

Continuous Delivery (CD)(持续交付)

基于继续集成的基础上,将集成的代码部署到测试环境,进行测试,可以手动部署到生产环境环境

Continuous Deployment(持续部署)

自动部署到生产环境

持续集成的优势

提高开发人员的工作效率

持续集成可将开发人员从手动任务中解放出来,并且鼓励有助于减少发布到客户环境中的错误和缺陷数量的行为,从而提高团队的工作效率。

更快发现并解决缺陷

通过更频繁的测试,您的团队可以在缺陷稍后变成大问题前发现并解决这些缺陷。

更快交付更新

持续集成有助于您的团队更快、更频繁地向客户交付更新。

目前有哪些继续集成工具

Jenkins     
      Jenkins是一款用Java编写的开源的CI工具。当Oracle收购Sun Microsystems时,它作为Hudson的分支被开发出来。Jenkins是一个跨平台的CI工具,它通过GUI界面和控制台命令进行配置。
      Jenkins非常灵活,因为它可以通过插件扩展功能。Jenkins插件非常好用,同时你可以容易地添加自己的插件。除了它的扩展性之外,Jenkins还有另一个非常好的功能——它可以在多台机器上进行分布式地构建和负载测试。Jenkins是根据MIT许可协议发布的,因此可以自由地使用和分发。Cloudbees还提供Jenkins in Cloud形式的托管解决方案。

      总结:Jenkins是最好的持续集成工具之一,它既强大又灵活。学习它可能要花费一些时间,但是如果你需要一个灵活的持续集成解决方案,那么学习如何使用它将是非常值得的。

      官方网址:Jenkins
      可用性:免费
      平台:跨平台


      TeamCity    
      TeamCity是一款成熟的CI服务器,来自JetBrains公司。 JetBrains已经在软件开发世界中建立了权威,他们的工具如WebStorm和ReSharper正被全球的开发者所使用。
TeamCity在它的免费版本中提供了所有功能,但仅限于20个配置和3个构建代理。额外的构建代理和构建配置需要购买,你可以在这里找到价格。
      TeamCity安装后即可使用,可以在多种不同的平台上工作,并支持各种各样的工具和框架。 能够支持JetBrains和第三方公司开发的公开的插件。尽管是基于Java的解决方案,TeamCity在众多的持续集成工具中提供了最好的.NET支持。TeamCity也有多种企业软件包,可以按所需代理的数量进行扩展。
      总结:整体而言是TeamCity是非常好的持续集成解决方案,但由于其复杂性和价格,更适合      企业需求。
      官方网站:TeamCity
      可用性:3个代理和20个构建配置是免费的,额外的代理和配置需要付费
      平台:Servlet容器(本地)

 

      Travis CI    

      Travis CI是最老的托管解决方案之一,赢得了很多人的信任。虽然它主要以托管解决方案而闻名,但它也以企业包的形式提供内部版本。

      Travis CI对GitHub上托管的所有开源项目以及前100个版本的构建都是免费的。有几个定价计划可以供你选择,它们之间主要区别是你可以运行的并发构建数量。

      Travis CI的构建通过.travis.yml文件进行配置,该文件包含了在构建时所需要执行的任务。它能够支持多种语言并提供完善的帮助文档。

      总结:一个成熟的解决方案,提供托管和本地变种,被许多团队喜爱和使用,非常有据可查。

      官方网站:Travis CI

      可用性:对开源计划和前100个版本的构建是免费的,其他的服务需要付费

      平台:托管和本地

 

      Go CD    

      Go是ThoughtWorks公司最新的Cruise Control的化身。除了ThoughtWorks提供的商业支持,Go是免费的。它适用于Windows,Mac和各种Linux发行版

      让Go脱颖而出的是它的流水线概念,使复杂的构建流程变得简单。关于流水线概念是如何帮助持续交付,以及如何与Jenkins的流水线流程进行比较,您可以在这里阅读到相关内容。它最初的设计时就支持流水线概念,消除了构建过程的瓶颈,并能够并行地执行任务。

      总结:Go CD非常适合复杂场景,并且能够免费提供付费的支持。

      官方网站:Go CD

      可用性:免费提供付费的支持

      平台:Windows,Mac和一些Linux发行版

 

       Bamboo   

      Atlassian是专注于为软件开发团队提供工具的公司,你或许已经通过JIRA和Bitbucket了解到了他们。Bamboo最初提供了云端和本地两种持续集成的解决方案,但在2016年5月,云端版本不再支持Bitbucket Pipeline。Bitbucket Pipeline能够支持Docker, 是一个非常高效且快速的持续集成解决方案,正在迅速发展,是Bamboo云端版本的有利继承者。

      Bamboo可以免费试用30天。作为Atlassian工具,它能够很好地支持JIRA和BitBucket,甚至可以将Jenkins配置轻松地导入到Bamboo中。

      总结:Bamboo是一款本地CI工具。其原本的云段解决方案被Bitbucket pipeline所取代。有30天的免费试用,在此之后可以进行付费使用。

      官方网站:Bamboo

      可用性:付费免费试用

      平台:本地

 

       GitLab CI     

      GitLab CI是开源的Rails项目GitLab的一个组成部分,由GitLab公司将它带到了大众的视野中。 GitLab托管在GitLab.com上,GitLab.com提供了免费的托管服务,并且提供了git仓库存储和管理功能,如访问控制,问题跟踪,代码评论等。

      GitLab CI能与GitLab完全集成,可以通过使用GitLab API轻松地作为项目的钩子。GitLab的执行部分(流程构建)使用Go语言编写,可以运行在Windows,Linux,OSX,FreeBSD和Docker上。

官方的Go Runner可以同时运行多个作业,并具有内置的Docker支持。 Gitlab CI有两个版本:开源的GitLab社区版和GitLab企业版

      总结:GitLab CI是一款令人印象深刻的托管工具,提供了免费版本和企业版本。

      官方网站:GitLab CI

      可用性:免费和付费

      平台:托管(可以在Gitlab.com上托管)

 

       CircleCI   

      CircleCI也来自GitLab公司,是另一款云端的持续集成管理工具。CircleCI目前仅支持Github管理,它能够支持的语言包括:Java, Ruby/Rails, Python, Node.js, PHP, Haskell, and Skala。

CircleCI和其他持续集成工具不同的地方在于他们提供服务的方式。CircleCI需要付费的主要是它的容器。你可以免费使用一个容器,当你开始使用更多容器的时候,你可以选择你所需要的并行化级别来加速你的应用。

      主要有5个并行化级别可以供我们选择: 1x, 4x, 8x, 12x and 16x。你可以选择用16个容器进行一个项目的构建,此时并行化级别就为16x,当然你也可以用16个容器同时进行4个项目的构建,此时并行化级别为4x,如何选择取决于你。同时CircleCI也能够支持Docker。

      总结:CircleCI是一个灵活的云端CI工具,提供的最大并行化级别为16x。当你需要快速地进行项目构建时它将是一个不错的选择,同时它的价格也不是很贵。

      官方网站:CircleCI

      可用性:免费和付费

      平台:托管

 

      Codeship  

      Codeship是一个本地的持续集成解决方案。它有两种不同的版本:基本版和专业版。在基本版中提供了安装即用的持续集成服务但是不能够支持Docker,它的主要用途就是通过UI来进行应用的构建等操作。专业版本提供了更灵活的功能以及Docker支持。

      在基本版中有几个可选的付费包,越贵的付费包并行能力越好。在专业版本中你可以选择你的实例类型和并行级别(最高的级别为20x),价格稍微有点贵,但是大多数的团队应该会需要这种并行化构建的功能。

      总结:Codeship是一个强大的带有Docker支持的本地持续集成解决方案

      官方网站:Codeship

      可用性:每个月的前100次构建免费,后续的构建需要付费

      平台:托管

 

        Codefresh   

      上面所提到的很多工具都能够支持Docker,但Codefrsh从设计到开发都将容器的理念贯彻其中。

      Codefresh的开发者们从一开始就意识到Docker会广受欢迎。Codefresh除了能够在现有的Docker文件中工作外,你也可以选择几个不同的模板来轻松地的将你的项目迁移到docker容器中。它的UI非常的干净和容易理解,你可以很容易地上手。

      之所以将Codefresh介绍给你们的原因在于它有一个让人非常惊喜的功能。这个功能就是将你的镜像发布到一个临时的环境中。当项目被建立时,它的镜像也被建立了,你可以发布这个镜像并观察它是如何工作的。那意味着你可以得到一个临时的工作环境,而不需要一个额外的虚拟机,这就是它非常棒的地方。

      Codefresh是一款比较新的工具,有很多能够改进的地方和新的特性可以增加。但是它把容器作为它的重要组成部分使得它对任何一个打算使用Docker容器的团队来说都将是一个非常好的持续集成解决方案。

      总结:Codefresh是一个支持Docker的持续集成工具,它可以发布和建立本地环境的Docker镜像。

      官方网站:Codefresh

      可用性:每个月的前200次构建,5个并发的构建和一个本地环境是免费的,额外的服务需要付费。

      平台:本地

为什么要扩展再开发

第一,Jenkins不能自动创建Jenkins任务,必须在Jenkins平台上手工创建,大大降低了集成效率,而且需要大家都掌握创建Job的方法以及Job上的配置,不利于工具推广;

第二,其数据显示不能定制化,如果想要集成数据在一个页面上显示,那么Jenkins是无法满足这个要求的;

第三,数据不能持久化,目前Jenkins的数据是通过文本的方式保存的,而且量很大,不利于数据维护和后续的数据分析;

第四,执行机掉线没有报警功能,不会及时通知管理员及时处理;

第五,数据反馈机制比较单一,Jenkins仅支持邮件的方式进行发送通知;

第六,通过项目信息查询任务困难,Jenkins没有项目的维度,只有Job的维度,不方便查找

其他公司解决方案

阿里云效(aone)不止是冰山一角——阿里云效团队大规模代码构建技术实践 

百度 百度持续交付体系与最佳实践大解密!

新浪 新浪SCE Docker最佳实践 

亚马逊 AWS DevOps实践:一年5000万次部署是怎样一种概念? 

jenkins VS gitlab-ci

GitLab CI 是 GitLab 默认集成的 CI 功能,GitLab CI 通过在项目内 .gitlab-ci.yaml 配置文件读取 CI 任务并进行相应处理;GitLab CI 通过其称为 GitLab Runner 的 Agent 端进行 build 操作;Runner 本身可以使用多种方式安装,比如使用 Docker 镜像启动等;Runner 在进行 build 操作时也可以选择多种 build 环境提供者;比如直接在 Runner 所在宿主机 build、通过新创建虚拟机(vmware、virtualbox)进行 build等;同时 Runner 支持 Docker 作为 build 提供者,即每次 build 新启动容器进行 build;GitLab CI 其大致架构如下

GitLab

 jenkinsgitlab-ci
编译环境直接运行docker需要安装插件gitlab-runner需要配置
gitlab集成一般完美集成
配置文件Jenkinsfilegitlab-ci.yml
操作页面没有页面,可以通过gitlab查看web控制台 显示整个编译过程
shell脚本支持支持
隔离

编译服务和代码仓库隔离

配置文件可以不再工程中配置

集成在gitlab中

yml配置在工程中

编译环境控制台安装或自行配置自行配置
难易程度配置繁琐简单易用
扩展插件丰富不支持
开发语言javago
docker安装插件内置
Kubernetes支持支持(kubernetes integration、kubectl、k8sapi)
应用性能监控Prometheus Plugin(同时支持Grafana Labs)Prometheus Integration
应用性能报警(待确认)基于Prometheus metrics界面化配置
GitLab 服务监控通过Prometheus配置通过Prometheus配置
流程分析 Cycle Analytics
docker images 仓库无第三方实现GitLab Container Registry
git信息拉取原生支持
负载均衡支持支持
docker发布支持支持
web terminal无第三方实现kubernetes integration发布模式下支持
pipeline执行界面详细日志界面化图形展示
发布记录下载不支持支持
定时发布支持支持
代码质量插件支持
私有变量不支持支持
发布环境不支持支持切换
运行环境macos、linux、windowsmacos、linux、windows
代码覆盖率插件支持
执行外部文件支持支持
配置信息繁琐简单

gitlab-ci作为gitlab提供的一个持续集成的套件,完美和gitlab进行集成,gitlab-ci已经集成进gitlab服务器中,在使用的时候只需要安装配置gitlab-runner即可。 
gitlab-runner基本上提供了一个可以进行编译的环境,负责从gitlab中拉取代码,根据工程中配置的gitlab-ci.yml,执行相应的命令进行编译。

gitlab-runner配置简单,很容易与gitlab集成。当新建一个项目的时候,不需要配置webhook回调地址,也不需要同时在jenkins新建这个项目的编译配置,只需在工程中配置gitlab-ci.yml文件,就可以让这个工程可以进行编译。
gitlab-runner没有web页面,但编译的过程直接就在gitlab中可以看到,不需要像jenkins进入web控制台查看编译过程。
gitlab-runner仅仅是提供了一个编译的环境而已,全部的编译都通过shell脚本命令进行。当然,jenkins也可以是全部的编译都通过shell脚本命令进行。
jenkins的好处就是编译服务和代码仓库分离,而且编译配置文件不需要在工程中配置,如果团队有开发、测试、配置管理员、运维、实施等完整的人员配置,那就采用jenkins,这样职责分明。不仅仅如此,jenkins依靠它丰富的插件,可以配置很多gitlab-ci不存在的功能,比如说看编译状况统计等。如果团队是互联网类型,讲究的是敏捷开发,那么开发=devOps,肯定是采用最便捷的开发方式,推荐gitlab-ci。
如果有些敏感的配置文件不方便存放在工程中(例如nexus上传jar的账户和密码或者是其他配置的账户密码),都可以在服务器中配置即可。
gitlab-ci对于编译需要的环境,比如jdk,maven都需要自行配置。在jenkins中,对于编译需要的环境,比如jdk,maven都可以在Web控制台安装即可。当然,jenkins也是可以自行配置的(有时候通过控制台配置下载不下来)。
 

Redmine是用Ruby开发的基于web的项目管理软件,是用ROR框架开发的一套跨平台项目管理系统,支持多种数据库,有不少自己独特的功能,例如提供wiki、新闻台等,还可以集成其他版本管理系统和BUG跟踪系统,例如Perforce、SVN、CVS、TD等等。这种 Web 形式的项目管理系统通过"项目(Project)"的形式把成员、任务(问题)、文档、讨论以及各种形式的资源组织在一起,大家参与更新任务、文档等内容来推动项目的进度,同时系统利用时间线索和各种动态的报表形式来自动给成员汇报项目进度。 Git 是用于 Linux 内核开发的版本控制工具。与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持,使源代码的发布和交流极其方便。 Git 的速度很快,这对于诸如 Linux kernel 这样的大项目来说自然很重要。 Git 最为出色的是它的合并跟踪(merge tracing)能力。 Sonarqube是一个用于代码质量管理的开源平台,用于管理源代码的质量,可以从七个维度检测代码质量,通过插件形式,可以支持包括java,C#,C/C++,PL/SQL,Cobol,JavaScrip,Groovy等等二十几种编程语言的代码质量管理与检测 Jenkins是一个开源软件项目,旨在提供一个开放易用的软件平台,使持续集成变成经济可行 Robot Framework是一款python编写的功能自动化测试框架。具备良好的可扩展性,支持关键字驱动,可以同时测试多种类型的客户端或者接口,可以进行分布式测试执行。主要用于轮次很多的验收测试和验收测试驱动开发(ATDD)。 Robot Framework + Selenium Grid 构建分布式B/S测试系统 Robot Framework + AutoIT 构建C/S测试自动化框架 Robot Framework + Appium 构建移动应用自动化测试框架 Trac是一个为软件开发项目需要而集成了Wiki和问题跟踪管理系统的应用平台,是一个开源软件应用。Trac以简单的方式建立了一个软件项目管理的Web应用,以帮助开发人员更好地写出高质量的软件;Trac应用力求不影响现有团队的开发过程。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值