概览
CD/CD 是一种通过将自动化引入应用程序开发阶段来频繁向客户交付应用程序的方法。 CI/CD的主要概念包括,持续集成( continuous integration),持续交付(continuous delivery)和持续部署(continuous deployment),CI/CD是集成新代码可能给开发和运营团队带来的问题的解决方案, (参考 “integration hell”)。
具体来说CI/CD 在软件开发的整个生命周期中引入了持续的自动化和持续监控,从集成,测试阶段到交付和部署。总的来说,这些相关的实践通常被成为”CI/CD pipeline“,并且得到了以敏捷方式共同工作的开发和运维团队的支持。
CI和CD(以及另外一种CD)的区别是什么?
这几个词有几个不同的含义。CI/CD中的“CI”总是指持续集成,这是开发人员的自动化过程。成功的CI(持续集成)意味着对应用程序的新代码更改会定期构建、测试并合并到主代码库中。这是解决了一个应用程序同时有太多分支在开发中可能会相互冲突的问题的方法。
CI/CD中的“CD”指的是持续交付和/或持续部署,这些概念有时可以互换使用。两者都是关于Pipeline的进一步自动化阶段,但是它们有时被单独用来说明自动化程度有多高。
CD(持续交付)通常意味着开发人员对应用程序的更改会被自动进行bug测试,并上传到存储库(如GitHub或容器注册表),在那里,他们可以被运维团队部署到实时生产环境中。这是对开发团队和业务团队之间可见性和沟通不佳问题的一个解决方案。为此,持续交付的目的是确保部署新代码只需最少的工作量。
CD(持续部署)(另一种可能的“CD”)指的是自动将开发人员的变更从存储库发布到生产环境,供客户使用。它解决了手动流程使运维团队超负荷的问题,从而降低了应用交付的速度。它通常在自动化的下一个阶段,建立在持续交付的基础之上。持续部署在很大程度上依赖于设计良好的测试自动化。
常见的CI/CD解决方案
CI/CD服务商
- Travis CI - Test and Deploy Your Code with Confidence
- 老牌的CI服务商,和Github集成,私有仓库付费,开源免费,架构比较老,所有很多时候用起来比较繁琐,速度比较慢。
- CircleCI: Continuous Integration and Delivery
- 后来者居上的CI服务商,Github上很多项目开始转向使用Circle CI,之前看他们分享,后台是使用Nomad做的调度,很厉害。
-
- Continuously build, test, release and monitor apps for every platform.
- 微软出品的移动端CI/CD平台,之前我们iOS就是用的这个,有一定的免费额度,配置起来要比上面两个通用平台简单很多。并且收购github之后,搭配起来使用也很方便了。另外平台还有很多移动端服务,比如推送,统计等。
-
- 新式的基于容器和k8s构建的平台
SaaS/PaaS平台
- OpenShift: Container Application Platform by Red Hat, Built on Docker
- Heroku: Cloud Application Platform
这些平台都是本身平台支持你的服务运行,CI/CD是平台提供的解决方案。
开源方案
-
- Jenkins – an open source automation server which enables developers around the world to reliably build, test, and deploy their software.
- 推荐使用 https://jenkins.io/projects/blueocean/
-
- Jenkins X is a CI/CD solution for modern cloud applications on Kubernetes.
- Jenkins X是Jenkins的孵化项目,打通了从开发(Github)到部署(k8s)的流程。
-
- 基于容器
-
- GitLab CI/CD, the GitLab built-in Continuous Integration, Continuous Deployment, and Continuous Delivery toolset to build, test, and deploy
Jenkins最老牌,Gitlab是因为国内很多公司都是自建Gitlab托管代码。Drone目前用的还不算多。
代码托管平台
- Github
- Github自从被微软收购之后,动作频频,先是免费了个人私有仓库,最近又宣布加入了CI/CD功能,对于那些靠Github起家的CI/CD服务商来说,可能是一个比较大的压力。
毕竟CI/CD还是基于代码的,所以目前离代码近的托管服务,GIthub,Gitlab,BitBucket等,基本都支持了CI/CD的功能。
总结
CI/CD加快了软件交付,提高了软件质量,是非常好的工程实践。其中持续集成和持续交付,大部分CI/CD服务商都做的不错,但是持续部署这个点,是他们的短板,毕竟服务不是在他们上面运行,这方面PaaS服务商就具有优势了,因为本身服务就在上面部署。 不过国内大部分公司使用PaaS平台的还是比较少,所以很多人还是选择开源自建的方案。而Jenkins作为生态最大的开源项目,往往是第一选择。
参考: