基于Jenkins+Gitlab+Harbor+Rancher架构的CICD实现

在讲正文开始前先回顾一下以往传统的代码部署方式。

通常运维人员在接到代码(新项目)上线的任务前都要做大量的准备工作,包括:物理主机、虚拟机、代码运行环境、数据库安装配置、各种帐号创建,、运行后期的系统监控、应用的日志收集,性能优化等一系列的工作。

想一想这个流程不是很复杂,但是很繁琐,效率低下,如需要调试还需要给开发人员提供线上系统权限等等,细节没有注意的话,还会造成解决问题的难度等各种问题。

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完镜像,节省了部署的时间。

一、架构图

二、架构图说明

项目开发语言是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:

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

图2

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

图3

Rancher 插件的配置部分,其中API Endpoint、Rancher API Key、 和Rancher Enviroment Id

需要在Rancher的管理界面上创建API>秘钥>添加账号APIKey增加到jenkins中,使用API为https://xx.xx.xx.xx:8080/v2-beta 见图4 、5 、6

图4

图5

图6

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

图7

总结

1. 目前这套流程,在测试环境跑了三个小项目,线上环境跑了一个小项目。

2. 项目代码(svn)和项目配置文件相关(gitlab)应该整合到一起,很好解决。

3. 所有的问题都是在测试环境中不断发现问题,解决问题,然后在线上进行完善,以防止出现不可控制的风险发生,毕竟这个技术储备对于目前的团队来说还有很大不足。

目前面临的问题有:

1.没有测试环节,无法验证容器镜像构建完成更新容器后,是否能够正常提供服务,这样发到生产环境是危险的。

如果说解决方案,那就是在镜像构建完毕后,启动一个单元测试,来验证结果或者再发布一个预上线环境用自动化的全方位的测试,测试通过出发更新生产环境的发布即更新service,否则通知发布者测试未通过。

2. 整套流程,没有实现如何回滚到上一版本的方法,其实这个也容易,就是在③步的svn代码checkout那步加上带版本号的命令行即可。

本文完

时间: 2024-10-01 00:40:07

基于Jenkins+Gitlab+Harbor+Rancher架构的CICD实现的相关文章

基于docker搭建Jenkins+Gitlab+Harbor+Rancher架构实现CI/CD操作

一.各个组件的功能描述: Docker 是一个开源的应用容器引擎. Jenkis 是一个开源自动化服务器. (1).负责监控gitlab代码.gitlab中配置文件的变动: (2).负责执行镜像文件的构建.上传与下载; (3).通过Rancher插件系统构建stack/service; GitLab: 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具. (1).保存项目配置文件; (2).nginx定制配置文件; (3).Dockerfile文件; Harbor:开源的docker镜

基于Jenkins+Gitlab的自动化部署实战

故事背景 一个中小型企业,是典型的互联网公司,当初期的时候可能运维只能标配到2~3人,此时随着公司的发展,项目会逐渐增多.前期部署项目可能都是手动的, 俗称"人肉部署",这简直是无比的痛苦,不能忍受的.这样开发的时间也会耽误,运维的时间也会耽误,全都浪费在这些重复性的工作上面,毫无价值可言, 这时候运维终于忍受不了,上了脚本.但是慢慢的发现项目依旧在增长,脚本每次还要更改给开发,效率低下,后来测试环境以及开发环境直接上了jeknins, 每台开发机器是jeknins agent端,自此

部署基于Gitlab+Docker+Rancher+Harbor的前端项目这一篇就够了

部署基于Gitlab+Docker+Rancher+Harbor的前端项目这一篇就够了 安大虎 ? momenta 中台开发工程师 6 人赞同了该文章 就目前的形势看,一家公司的运维体系不承载在 Docker+Harbor(或 Pouch 等同类平台)之上都不好意思说自己的互联网公司.当然这些技术也不适用于全部公司,技术在迭代,平台也一样,把我使用的工具和大家分享下,一起成长(文章中扩展可按需Google). Docker docker的架构图如下: 从图中可以看出几个组成部分 docker c

jenkins+docker+gitlab+harbor+pipeline快速部署发版流程

介绍随着业务的增长,需求也开始增多,每个需求的大小,开发周期,发布时间都不一致.基于微服务的系统架构,功能的叠加,对应的服务的数量也在增加,大小功能的快速迭代,更加要求部署的快速化,智能化.因此,传统的人工部署已经心有余而力不足.持续集成,持续部署,持续交互对于微服务开发来说,是提高团队整体效率不可或缺的一环.合理的使用CI,CD能够极大的提高了生产效率,也提高了产品的交互质量.流程梳理: 1.开发人员对上线版本在gitLab上打了一个tag2.jenkins获取tag版本.3.编写pipeli

基于Jenkins,docker实现自动化部署(持续交付)

前言 随着业务的增长,需求也开始增多,每个需求的大小,开发周期,发布时间都不一致.基于微服务的系统架构,功能的叠加,对应的服务的数量也在增加,大小功能的快速迭代,更加要求部署的快速化,智能化.因此,传统的人工部署已经心有余而力不足.持续集成,持续部署,持续交互对于微服务开发来说,是提高团队整体效率不可或缺的一环.合理的使用CI,CD能够极大的提高了生产效率,也提高了产品的交互质量.本文不对三个概念做过多的介绍,有兴趣可以读读这篇文章:The Product Managers' Guide to

基于 Docker 的微服务架构实践

本文来自作者 未闻 在 GitChat 分享的{基于 Docker 的微服务架构实践} 前言 基于 Docker 的容器技术是在2015年的时候开始接触的,两年多的时间,作为一名 Docker 的 DevOps,也见证了 Docker 的技术体系的快速发展.本文主要是结合在公司搭建的微服务架构的实践过程,做一个简单的总结.希望给在创业初期探索如何布局服务架构体系的 DevOps,或者想初步了解企业级架构的同学们一些参考. Microservice 和 Docker 对于创业公司的技术布局,很多声

Jenkins Gitlab持续集成打包平台搭建

相关概念 Jenkins Jenkins,一个用Java编写的开源的持续集成工具,提供了软件开发的持续集成服务,可监控并触发持续重复的工作,具有开源,支持多平台和插件扩展,安装简单,界面化管理等特点.更多介绍参考[维基](https://en.wikipedia.org/wiki/Jenkins_(software)介绍. Gitlab GitLab是一个利用Ruby on Rails开发的开源应用程序,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目,更多介绍参考维基

【iOS】Jenkins Gitlab持续集成打包平台搭建

Jenkins Gitlab持续集成打包平台搭建 SkySeraph July. 18th 2016 Email:[email protected] 更多精彩请直接访问SkySeraph个人站点:www.skyseraph.com 1. 相关概念 Jenkins Jenkins,一个用Java编写的开源的持续集成工具,提供了软件开发的持续集成服务,可监控并触发持续重复的工作,具有开源,支持多平台和插件扩展,安装简单,界面化管理等特点.更多介绍参考维基介绍. Gitlab GitLab是一个利用R

.Net Core自动化部署:Jenkins + GitLab

项目进行微服化改造后系统发布就变得愈为重要,因为持续集成导致部署变得越来越频繁,人工部署带来的一些问题日渐凸显,大家可能都有被系统部署线问题困扰过的经历. 本篇我们将会使用Jenkins+Gitlab来实现程序的持续集成和自动化发布. 1.新建项目提交到GitLab 首先需要有一个GitLab仓库,这个注册一下就可以,具体流程就不写了. 通过GitLab新建一个项目(Project):(没有的话可以使用我这个来测试:https://git.lug.ustc.edu.cn/Deepmountain