设为首页 收藏本站
查看: 2357|回复: 1

[Devops] 基于Jenkins+Gitlab+Harbor+Rancher架构的CI/CD实现

[复制链接]

尚未签到

发表于 2018-9-3 12:38:16 | 显示全部楼层 |阅读模式
  在讲正文开始前先回顾一下以往传统的代码部署方式。
  通常运维人员在接到代码(新项目)上线的任务前都要做大量的准备工作,包括:物理主机、虚拟机、代码运行环境、数据库安装配置、各种帐号创建,、运行后期的系统监控、应用的日志收集,性能优化等一系列的工作。
  想一想这个流程不是很复杂但是很繁琐,效率低下,如需要调试还需要给开发人员提供线上系统权限等等,细节没有注意的话,还会造成解决问题的难度等各种问题。
  OK,说完以上的问题,那接下来就有相对应的解决方案。
  方案大概的架构组成:
  jenkins+saltstack+svn+gitlab+harbor+rancher
  各个组件的功能描述:
  1. jenkins
  (1)负责监控SVN代码、gitlab中配置文件的变动
  (2)负载执行镜像的构建、上传下载
  (3)通过Rancher插件系统构建stack/service
  (4)发送构建结果通知
  2. svn
  (1)开发提交代码仓库(部门项目一直习惯使用svn管理代码)
  3. gitlab
  (1)保存项目配置文件
  (2)nginx定制配置文件
  (3)Dockerfile文件
  说明:
  为什么这里会有svn和gitlab两个代码工具呢?我来解释一下,主要是
  (1)部门的开发一直以来都在使用svn,还不是特别习惯git方式。
  (2)要求代码的线上配置连接数据库帐号开发不能直接修改,且也不知道。不向开发泄漏线上帐号,分开管理,这里我就采用git后面有详细介绍。
  4. harbor
  这个是vmware公司开源的docker镜像仓库管理系统,比较方便管理维护镜像
  (1)负责构建后镜像的存储
  5. rancher
  容器编排管理工具
  (1)通过API负责接受jenkins的调用,自动创建、更新stack/service
  (2)实现服务的扩容缩容
  6. saltstack
  (1)这个组建可有可无,为什么呢?
  主要原因是:在rancher中每个服务的后端有时至少是两个以上的容器支持对外访问,分布在多个服务器上运行,同样的容一个镜像要分别pull到宿主机中,这个时间是成倍的(对于容器分布在不同宿主机上来说),saltstack实现了镜像的并发下载,也就是说只是耗费了同样的时间,每个宿主机都同时pull完镜像,节省了部署的时间。
  一、架构图
DSC0000.jpg

  二、架构图说明
  项目开发语言是php,使用了比较流行的laravel框架,项目中用到的laravel插件使用composer安装,npm安装全局模块,编译生成js样式文件
  ① 开发人员提交代码到svn,运维人员更改nginx配置、项目env配置并提交到gitlab
  ②svn、gitlab钩子会触发jenkins执行下载对应项目的env、nginx配置文件、Dockerfile和最新版本的代码
  ③jenkins执行shell脚本:composer安装laravel插件和npm安装模块,编译生成js文件。完好的代码通过docker build Dockerfile 指令打包成镜像
  ④上传构建好的镜像push到harbor镜像仓库
  ⑤jenkins借助Rancher的插件通过API与rancher交互更新service达到更升级容器的目的(也就是更新代码版本),其中pull镜像的这一步会通过saltstack并行从harbor上下拉之前构建好的镜像到多个主机上
  以上流程完整的实现了CI\CD,这里主要是jenkins部分是关键位置之一。
  下面通过关键配置的截图来展示一个清晰的思路
  三、jenkins详细配置
  (1)新建一个使用自由风格的项目,名称根据项目命名。同时勾选要在那个slave节点上进行项目构建,见图1红框部分
  图1:
DSC0001.jpg

  源码管理部分,这里就是架构图中的gitlab保存的项目配置文件,gitlab可以在Rancher的Catalog中进行安装,在gitlab中创建一个项目,创新用户有相对应的权限。Jienkins添加gitlab账户。配置见图2
  图2
DSC0002.jpg

  这一步是关键性的,也就是架构图中流程序号③做的工作,代码、镜像、上传下载都是在那一台slave节点完成的,这个slave节点同时配置成saltstack master服务,Rancher的计算节点配置成minion节点,这主要是为了并行下载镜像
  图3
DSC0003.jpg


  Rancher 插件的配置部分,其中API Endpoint、Rancher API Key、 和Rancher Enviroment>  需要在Rancher的管理界面上创建API>秘钥>添加账号APIKey增加到jenkins中,使用API为https://xx.xx.xx.xx:8080/v2-beta 见图4 、5 、6
  注意:
  图5的红框部分高级配置Auto Confirm 勾选后更新服务后,状态是正常的,不能回滚。
  如果不勾选,在更新服务后,状态在UI显示的Upgraded,再次发布时会造成失败。
  好处就是:如果你没有把握这次发布是一定没问题的,还可以在Rancher管理界面中回滚到之前的状态。
  图4
DSC0004.jpg

  图5
DSC0005.jpg

  图6
DSC0006.jpg

  下图是项目发布的Timeline,每次发布时长都在3分钟左右,还要看网络状况、镜像大小和构建容器镜像主机的性能。
  图7
DSC0007.jpg

  总结
  1. 目前这套流程,在测试环境跑了三个小项目,线上环境跑了一个小项目。
  2. 项目代码(svn)和项目配置文件相关(gitlab)应该整合到一起,很好解决。
  3. 所有的问题都是在测试环境中不断发现问题,解决问题,然后在线上进行完善,以防止出现不可控制的风险发生,毕竟这个技术储备对于目前的团队来说还有很大不足。
  目前面临的问题有:
  1.没有测试环节,无法验证容器镜像构建完成更新容器后,是否能够正常提供服务,这样发到生产环境是危险的。
  如果说解决方案,那就是在镜像构建完毕后,启动一个单元测试,来验证结果或者再发布一个预上线环境用自动化的全方位的测试,测试通过出发更新生产环境的发布即更新service,否则通知发布者测试未通过。
  2. 整套流程,没有实现如何回滚到上一版本的方法,其实这个也容易,就是在③步的svn代码checkout那步加上带版本号的命令行即可。
  本文完


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-562059-1-1.html 上篇帖子: 某机构最新docker+k8s【价格偏高,不接受讲价,愿买就卖】 下篇帖子: Python高级运维编程实战精品入门进阶(全27集) 老男孩
累计签到:2 天
连续签到:1 天
发表于 2020-8-29 21:52:46 | 显示全部楼层
老铁能加个微信吗,大家一起交流下

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表