持续集成(CI)的定义及其主要目标
持续集成(CI)是一种软件开发实践,它基于将代码频繁集成到共享代码仓中。 然后通过自动构建(automated build)验证每个签入(Check-In)。
持续集成(CI)的主要目标是更早,更容易地识别开发过程中可能出现的问题。 如果定期集成 - 在查找错误时检查的次数要少得多。 这样可以减少调试时间,增加功能时间。 还有一个选项可以设置代码样式的检查,代码复杂度(低复杂性使测试过程更简单)和其他检查。 这有助于最大限度地减少负责代码审查的人员的工作量,节省时间并提高代码质量
它如何工作
- 开发人员在其本地计算机上检查代码
- 完成后 - 他们将代码变更提交到代码仓
- 代码仓向CI系统发送请求(webhook)
- CI服务器运行任务(测试,覆盖率,检查语法等)
- CI服务器发布已保存的工件(artifacts)以进行测试
- 如果构建或测试失败,CI服务器会向团队发出警报
- 该团队解决了这个问题
CircleCI vs Travis CI vs Jenkins
现在,当持续集成的过程明确时(我希望如此),我们可以转向现在一些最流行的CI平台的比较。 每个都有其优点和缺点。 让我们从CircleCI开始吧。
CircleCI
Features :
- CircleCI是一个基于云的系统 - 不需要专用服务器,您无需管理它。 但是,它还提供了一个本地解决方案,允许您在私有云或数据中心中运行它。
- 即使是商业帐户,它也有免费计划
- Rest API - 您可以访问项目,构建和工件(artifacts)。构建的结果将是工件或工件组。 工件可以是已编译的应用程序或可执行文件(例如,android APK)或元数据(例如,关于测试`成功的信息)
- CircleCI 缓存必要的安装(requirements installation)。 它会检查第三方依赖项,而不是持续安装所需的环境
- 您可以触发SSH模式访问容器并进行自己的调查(如果出现任何问题)
- 这是一个完整的开箱即用解决方案,需要最少的配置调整
CircleCI与以下产品兼容:
- Python,Node.js,Ruby,Java,Go等
- Ubuntu(12.04,14.04),Mac OS X(付费账户)
- Github,Bitbucket
- AWS,Azure,Heroku,Docker,专用服务器
- Jira,HipChat,Slack
CircleCI优点:
- 快速启动
- CircleCI有一个免费的企业项目计划
- 这很容易,也很快开始
- 轻量级,易读的YAML配置
- 您不需要任何专用服务器来运行CircleCI
CircleCI缺点:
- CircleCI仅支持2个版本的Ubuntu免费(12.04和14.04)和MacOS作为付费部分
- 尽管CircleCI可以使用并运行所有语言,但tt仅支持“开箱即用”的以下编程语言:
Go(Golang),Haskell,Java,PHP,Python,Ruby / Rails,Scala
- 如果您想进行自定义,可能会出现一些问题:您可能需要一些第三方软件来进行这些调整
- 此外,虽然作为基于云的系统是一方的优势,它也可以停止支持任何软件,你将无法阻止
Travis CI
Travis CI and CircleCI are almost the same
Both of them:
- Have YAML file as a config
- Are cloud-based
- Have support of Docker to run tests
What does TravisCI offer that CircleCI doesn’t?
- Option to run tests on Linux and Mac OS X at same time
- Supports more languages out of the box:
Android, C, C#, C++, Clojure, Crystal, D, Dart, Erlang, Elixir, F#, Go, Groovy, Haskell, Haxe, Java, JavaScript (with Node.js), Julia, Objective-C, Perl, Perl6, PHP, Python, R, Ruby, Rust, Scala, Smalltalk, Visual Basic
- Support of build matrix
Travis CI和CircleCI几乎相同
他们都:
- 将YAML文件作为配置
- 是基于云的
- 支持Docker运行测试
TravisCI提供了一些CircleCI没有的?
- 可选择在Linux和Mac OS X上同时运行测试
- 开箱即用支持更多语言:
Android,C,C#,C ++,Clojure,Crystal,D,Dart,Erlang,Elixir,F#,Go,Groovy,Haskell,Haxe,Java,JavaScript(带Node.js),Julia,Objective-C,Perl,Perl6, PHP,Python,R,Ruby,Rust,Scala,Smalltalk,Visual Basic
- 支持构建矩阵
构建矩阵
language: python
python: - "2.7"- "3.4"- "3.5"
env: - DJANGO='django>=1.8,<1.9'- DJANGO='django>=1.9,<1.10'- DJANGO='django>=1.10,<1.11'- DJANGO='https://github.com/django/django/archive/master.tar.gz'
matrix: allow_failures:- env: DJANGO='https://github.com/django/django/archive/master.tar.gz'
构建矩阵是一种工具,可以使用不同版本的语言和包运行测试。 您可以以不同的方式自定义它。 例如,某些环境的失败可以触发通知但不会使所有构建失败(这对包的开发版本有帮助)
TOX
如果您更喜欢任何其他CI平台 - 总有一个选项可以使用Tox创建构建矩阵。
[tox]
envlist = py{27,34,35}-django{18,19,110,master}
[testenv]
deps = py{27,34,35}: -rrequirements/test.txtdjango18: Django>=1.8,<1.9django19: Django>=1.9,<1.10django110: Django>=1.10,<1.11djangomaster: https://github.com/django/django/archive/master.tar.gz
commands = ./runtests.py
[testenv:py27-djangomaster]
ignore_outcome = True
Tox是一种通用的virtualenv管理和测试命令行工具。 您可以使用pip install tox或easy_install tox命令安装它。
Travis CI优点:
- 开箱即用构建矩阵
- 快速启动
- 轻量级YAML配置
- 开源项目的免费计划
- 无需专用服务器
Travis CII缺点:
- 与CircleCI相比,价格更高,没有免费的企业计划
- 定制(对于某些你需要第三方的东西)
Jenkins
Features:
- Jenkins是一个独立的基于Java的程序,随时可以运行,包含Windows,Mac OS X和其他类Unix操作系统的软件包
- 凭借更新中心中的数百个插件,Jenkins几乎集成了持续集成和持续交付工具链中的所有工具
- Jenkins可以通过其插件架构进行扩展,为Jenkins提供了几乎无限的可能性
- 各种工作模式:自由式项目(Freestyle project),管道(Pipeline),外部作业(External Job),多配置项目,文件夹,GitHub组织,多分支管道
- Jenkins管道。这是一套插件,支持在Jenkins中实现和集成连续交付管道。 Pipeline提供了一组可扩展的工具,用于通过Pipeline DSL“作为代码”对简单到复杂的交付管道进行建模
- 允许您启动具有各种条件的构建。
- 您可以使用Libvirt,Kubernetes,Docker等运行Jenkins。
- Rest API - 可以访问控制您获取的数据量,获取/更新config.xml,删除作业,检索所有构建,获取/更新作业说明,执行构建,禁用/启用作业
Jenkins优点:
- 价格(免费)
- 定制
- 插件系统
- 完全控制系统
Jenkins缺点:
- 需要专用服务器(或多个服务器)。这导致额外的费用。对于服务器本身,DevOps等...
- 配置/定制所需的时间
结论
选择什么CI系统? 这取决于您的需求以及您计划使用它的方式。
CircleCI建议用于小型项目,其主要目标是尽快开始集成。
当您从事开源项目时,建议使用Travis CI,这些项目应在不同环境中进行测试。
Jenkins被推荐用于大型项目,在这些项目中,您需要进行大量自定义,这些自定义可以通过使用各种插件来完成。 您可以在这里更改几乎所有内容,但此过程可能需要一段时间。 如果您计划使用CI系统最快的开始,Jenkins可能不是您的选择。