CI/CD平台的作用我就不再啰嗦了。现在又比较流行docker容器化(快速,环境无缝切换等作用),所以世面上还没有一套成型的,固定的套件来拱企业快速搭建自己的CI/CD平台(花钱买服务的除外),docker云也更是五花八门,DaoCloud,Swarm等。作者有幸参加了公司的CI/CD平台搭建,从无到有的做了一套持续集成持续交付平台,算上大致接近尾声了。这里分享一下,阅读此博文需要以下知识储备与要求:
- Jenkins
- docker,docker云(Rancher或者其他云)
- 着手做过CI平台
文章结构
- 基于Jenkins,Shell脚本的传统CI平台
- 基于Jenkins,docker云的容器化CI/CD平台
1. 基于Jenkins,Shell脚本的传统CI平台
作者在上家公司着手做了一套基于Shell脚本的CI平台,这里不再啰嗦,只简单放一张图:
2. 基于Jenkins,docker云的容器化CI/CD平台
重头戏来了。基于Shell脚本的部署其实还是能解决一般企业的CI需求,然而,对于微服务架构的多工程快速部署,平台无关性,就需要容器化部署了。
同理,上一张图:
下面开始一步一步的讲解:
1. 代码提交
2. 根据webhook触发Jenkins构建
说白了,就是代码提到Gitlab,在Gitlab配置一个webhook像Jenkins发送一个请求,Jenkins收到这个请求后就会开始执行构建。当然了,Jenkins里是依赖的Gitlab plugin插件来支持这个功能的。参考博文:Gitlab plugin使用
3. 进行构建
这一步是最繁琐的,也是要重点讲的,这里涉及到很多配置。首先需要说一下的是,我这里的Jenkins是物理部署的。这一步Jenkins的配置我会在最后贴出来。Jenkins在这一步里执行构建(clean install)后打包好工程后自动根据插件
1 | 复制代码 <groupId>com.spotify</groupId> |
依赖一个事先准备好的Dockerfile构建出docker镜像并推送到远程Habor.
这一步需要注意如下配置:
- docker环境的配置。
- docker-maven-plugin配置
这两个配置都不是那么好配置的。
- 先说第一个,docker环境的安装好后,需要设置Docker的Insecure registries里加上自己的私服Harbor地址,这是因为docker在进行推送镜像时是https协议,而Harbor是http协议的,所以要设置信任这个地址,否则在进行推送时会报错的。参考博文:docker配置信任地址,还是给大家截图一下我的配置:
- 再说第二个,这个插件的配置就更难了,先上我自己的配置。
1 | 复制代码<build> |
这里需要指出的是,docker-private-registry这一行,一定要在自己maven的setting文件里配置上自己Harbor和账号密码。
1 | 复制代码<server> |
给个参考博文(建议大家用我的配置,参考博文真的只能参考,很多错误):spotify插件
然后给下自己的srm/main/docker目录下的Dockerfile
1 | 复制代码FROM anapsix/alpine-java:8 |
上面的具体配置我就不一一讲了,因为很复杂,像dockerfile里的内置变量转换不出来什么的,大家就多参考参考我的配置,配置都是整理了很长时间才出来的,还是那句老话,只讲思路,具体配置大家多参考其他文章,思路出来了,慢慢的就可以摸索出来。
4. 构建完成后发送CURL请求触发Rancher的WebHook
按照上面的配置后,jenkins构建算是完成了,我们新构建的docker镜像也推送到了远程的HarBor私服镜像库。这时就要执行CURL指令来触发Rancher拉取镜像部署了。
下面给一下我jenkins的截图。
至于CURL后面如何写的,Rancher官网webhook,需要事先在Rancher的webhook配置,生成一些参数,然后curl.我就不多讲了,大家自行看官网。
Rancher WebHook
5. Rancher根据WebHook触发后拉取镜像并且部署。
讲的比较草率,可能很多人很蒙蔽,其实这篇博文的精华就是开头那一张图,按照图中的思路摸索摸索就大致可以出来,为什么作者不愿意详讲呢,因为说实在的配置这个东西太麻烦了,很多配置很复杂,都需要自己摸索。我也只能提一提思路。
效果我就不演示,提交完代码后,在Jenkins构建好镜像自动推送到Harbor,然后Curl Ranche的WebHook,触发Rancher拉取最新镜像并部署。
Over, Have a good day .
本文转载自: 掘金