持续交付和DevOps的方法论及实践已经存在很不少年,其主要要解决的问题就是,如何快速,安全的完成从开发到发布、运维,及后续的线上监控等一系列活动。npm
持续交付和DevOps包含了不少内容,好比分层自动化测试、流水线卡点,infrastructure as code,线上机器auto healing、auto scale等等。但最重要的是,这些活动要有一个靠谱的工具平台来承载。安全
好在市面上可选的工具平台也是很是的多种多样。屈指一算,大概有这么几类:负载均衡
轻量级CI SaaS运维
以travis-ci为表明的轻量级CI,成为了开源项目的标配。可以提供丰富多样的构建环境和灵活的构建策略(好比并行构建等)。很是适合运行测试,可是在后续的部署、运维领域略显乏力。maven
单机版CD工具工具
以Jenkins为表明。Jenkins是一个以Job为核心概念,用各类插件不断丰富和武装本身的工具。在近几年前后推出了Jenkins 2.0(pipeline as first class citizen),Jenkins X(cloud native as first class citizen)。测试
Jenkins本质上是一个灵活的流程引擎,没有任何业务概念。所以对于不少场景化的需求须要进行上层的封装,能够是本身去配置一个个Job和Pipeline,也能够经过API批量调用。Jenkins的扩展能力很强,但对于企业的场景来讲,仍是会有一些限制。阿里云
云原生工具插件
平台自己和云平台有着很好结合。如前面提到的利用云平台的auto scaling的能力。事实上可以利用的能力还有不少,包括机器建立销毁,操做负载均衡,开启日志服务及监控等等。日志
目前比较有表明性的单机工具是Netflix的spinnaker。因为是国外的产品,他对AWS和Google Cloud等支持的比较好,但阿里云的支持仍是有限。
企业级平台
为企业的场景而生。通常内置项目、应用、流水线等模型,很好的匹配到企业的组织结构。同时提供企业研发所必须的一些配套基础设施,好比maven私服,npm私服等等。通常来说,企业级平台是场景化的。好比阿里云的一站式研发协同平台,云效,对主流语言(Java,Node,Php)的构建和主流平台(Linux)的部署都支持的很好。用户基本上简单的点点选选,一个从构建到发布的流程就能跑起来了。
这种平台可能的一个缺点就是,相比Jenkins这类产品,通用能力和灵活性不足。不少活动都须要在一些模型的概念下进行。
那么来聊聊吧
你的组织规模如何,你在组织内的角色是什么
正在使用什么样的持续交付工具链,又遇到什么问题
是否使用了云平台,你的工具链和云平台的集成度如何?
是否使用了Kubernetes等集群管理,你的工具链和Kubernetes的集成度如何?
你心中理想的持续交付工具链是什么样子的