通常运维人员在接到代码(新项目)上线的任务前都要做大量的准备工作,包括:物理主机、虚拟机、代码运行环境、数据库安装配置、各种帐号创建,运行后期的系统监控、应用的日志收集,性能优化等一系列的工作。
想一想这个流程不是很复杂但是很繁琐,效率低下,如需要调试还需要给开发人员提供线上系统权限等等,细节没有注意的话,还会造成解决问题的难度等各种问题。
OK,说完以上的问题,那接下来就有相对应的解决方案。
方案大概的架构组成:
Jenkins+saltstack+svn+gitlab+harbor+rancher
各个组件的功能描述:
1. Jenkins
2. svn
3. gitlab
说明:为什么这里会有svn和gitlab两个代码工具呢?我来解释一下,主要是
4. harbor
这个是vmware公司开源的docker镜像仓库管理系统,比较方便管理维护镜像
5. rancher
6. saltstack
这个组建可有可无,为什么呢?
主要原因是:在rancher中每个服务的后端有时至少是两个以上的容器支持对外访问,分布在多个服务器上运行,同样的容一个镜像要分别pull到宿主机中,这个时间是成倍的(对于容器分布在不同宿主机上来说),saltstack实现了镜像的并发下载,也就是说只是耗费了同样的时间,每个宿主机都同时pull完镜像,节省了部署的时间。
项目开发语言是php,使用了比较流行的laravel框架,项目中用到的laravel插件使用composer安装,npm安装全局模块,编译生成js样式文件
以上流程完整的实现了CI\CD,这里主要是Jenkins部分是关键位置之一。
下面通过关键配置的截图来展示一个清晰的思路
新建一个使用自由风格的项目,名称根据项目命名。同时勾选要在那个slave节点上进行项目构建,见图1红框部分
源码管理部分,这里就是架构图中的gitlab保存的项目配置文件,gitlab可以在Rancher的Catalog中进行安装,在gitlab中创建一个项目,创新用户有相对应的权限。Jienkins添加gitlab账户。
这一步是关键性的,也就是架构图中流程序号③做的工作,代码、镜像、上传下载都是在那一台slave节点完成的,这个slave节点同时配置成saltstack master服务,Rancher的计算节点配置成minion节点,这主要是为了并行下载镜像
Rancher 插件的配置部分,其中API Endpoint、Rancher API Key和Rancher Enviroment Id
需要在Rancher的管理界面上创建API>秘钥>添加账号APIKey增加到jenkins中,使用API为https://xx.xx.xx.xx:8080/v2-beta
注意:
图5的红框部分高级配置Auto Confirm 勾选后更新服务后,状态是正常的,不能回滚。
如果不勾选,在更新服务后,状态在UI显示的Upgraded,再次发布时会造成失败。
好处就是:如果你没有把握这次发布是一定没问题的,还可以在Rancher管理界面中回滚到之前的状态.
下图是项目发布的Timeline,每次发布时长都在3分钟左右,还要看网络状况、镜像大小和构建容器镜像主机的性能。
目前面临的问题有:
来源:本文转自 andylhz 的博客,链接:https://blog.51cto.com/andylhz2009/2053741