同意Steven99的观点,持续集成止步于镜像仓库。
镜像的好处之一是将一个服务运行时依赖的所有库都放在一起。以Java应用为例,例如服务A依赖的一个lib库a.jar出问题了,需要更新,那么当代码修改完以后,打包成一个新的镜像,这个镜像就可以在后面不同的环境里进行流转测试,最终到达生产环境,完成上线,而不是简简单单去替换每个环境上的a.jar文件,避免了出错的可能。
关于容器云平台之上的DevOps实践,有一些心得分享一下,给大家提供参考。
第一,从需求和计划的角度做好代码仓库和分支管理,并实现自动化构建镜像。
第二,定义多环境。不同的环境用于不同的目的,一般来说有几种场景,一套或多套DEV环境是为开发和测试人员进行功能测试使用;SIT环境是服务集成环境,确认各个服务的当前版本能够正常的集成到一起;UAT是用户验收环境,用以在上线之前对所有环境做最后一次验证;PROD环境里运行的服务是真实对外提供服务的。
第三,代码化。定义清楚这些环境之后,尝试将服务的配置从代码中抽取出来,将编排部署脚本也代码化,并且为不同的环境分别做好管理。
第四,定义流水线,也即镜像在不同环境中流转的过程。
上述步骤,个人理解最重要的实践是工具的使用和代码化,能借助工具自动完成的就使用工具,所有的信息代码化,也就可以实现版本管理。