转简易的微服务持续集成方案,SpringBoot+Docker+Jenkins+Gitlab
Posted SpringForAll社区
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了转简易的微服务持续集成方案,SpringBoot+Docker+Jenkins+Gitlab相关的知识,希望对你有一定的参考价值。
本来想写一篇企业级通用的CI/CD但是太麻烦了,涉及的知识点广度较多,我先写个简易的引子吧,以后看有没有机会分享一下近期研究出来的企业级比较通用的 CI/CD
方案,以一个SpringBoot的项目做示例。
发布流程如图
我的服务器环境是
CentOS7
Docker 18.03.0-ce
DockerCompose 1.19.0
本次方案所使用的技术有
Docker
Docker Compose
Jenkins
为了方便,我写做了一个docker-jenkins给颗小心心就可以了~
这里演示起见,为了方便我直接使用GitLab的仓库,这样大家都不用去创建自己的Git仓库,可以很快速方便的体验这份简易的持续集成方案,但这样做有个缺点就是如果你没有做内网映射或者是没有单独的服务器的话,你无法使用Git的WebHook访问到你的Jenkins服务器的接口
创建一个仓库,然后将项目推送至该仓库,这个不用写在文章里了吧,应该都会。
好,开始进入正题,进入正题之前请确保你已经安装了 docker
和 docker-compose
首先创建一个 jenkins
文件夹 然后将我GayHub仓库的 docker-compsoe.yml
下下来,为了方便我已经将镜像提交到了Docker仓库,如果你没有配置加速或者其它的一些方式的话,你可以自行下载 Dockerfile
文件进行 build
mkdir jenkins && cd jenkins
wget https://raw.githubusercontent.com/yuequan1997/docker-jenkins/master/docker-compose.yml
docker-compose up -d
使用 docker ps
检查下容器运行起来了没有
然后
docker logs 容器ID
注意我红色框起来的区域,如果没有的话,也没有出现异常的话,请等待一下,然后复制那一串加密的字符
如我的是: 61cfaad2c6a94b7ebb54deafac051150
打开浏览器输入: http://服务器IP:8080/
我在 docker-compose.yml
文件中配置了端口是8080的映射如果你的被占用或者你想更换端口的话,请自行更改
将复制的那串秘钥贴进去,点继续
直接点这个
等它安装完,同时你也可以使用 dokcer logs
命令来查看当前运行的控制台
创建一个账号
然后进入控制台,系统管理=》管理插件,然后选择可选插件,安装以下插件,利用右上角的过滤
Publish Over SSH
Gitlab
Gitlab Hook
Maven Integration
安装好以后,回到控制台,新建一个任务
因为我项目是使用maven构建也安装了maven插件,所以直接选
在General选项中,我配置了保留10个旧的构建
配置你的Git仓库
构建触发器选这个
然后点高级,这里生成了一个秘钥,然后只允许master分支触发Webhook构建
然后配置build,它会询问你的maven配置这时候点链接进去配置一下
配置好了后回来,我的配置内容如下,我是使用了 docker-maven-plugin
插件来做的镜像编译和推送
我的pom.xml插件配置如下
然后设置
添加一个
= = 去系统管理=》系统设置,添加个SSH Server
先进入 Docker
容器内生成执行 ssh-keygen
生成SSH秘钥对,如果你确定要用这套流程的话,请将 ~/.ssh
挂载,不然每次重启都会丢失 = =
docker exec -it 容器ID bash
ssh-keygen
然后再将生成的公钥加到你的应用服务器中去,然后再到应用服务器下创建一个目录为 releases
配置完后可以点击Test Configuration进行测试
设置完后继续回到任务中进行配置
我应用服务器的deploy.sh脚本内容如下
docker pull registry.cn-hangzhou.aliyuncs.com/mitchell/eureka-server:latest
docker stop eureka-server
docker rm eureka-server
docker run --name eureka-server -p 9001:9001 -d registry.cn-hangzhou.aliyuncs.com/mitchell/eureka-server:latest
然后保存后进行Gitlab的WebHook配置
配置这里
这里的内容填和
填好后点add WebHook添加成功 接着,我用的是Docker镜像推送,我需要在jenkins的宿主机中去登录一次我Docker的私有仓库,然后在修改下 docker-compose.yml
文件将 /root/.docker/config.json
映射到jenkins容器中去,镜像才能推送到我的仓库中去,否则会没有权限,因为 docker-maven-plugin
1.0的版本以后会默认的去读你的Docker配置,来进行仓库的推送,这里我演示是用的阿里云的镜像仓库,如果不想自己搭的话也可以去使用阿里云。
我推送到master分支,如果你是内网的话 = = git访问不到你的jenkins机器的话,你自己点立即构建开始了自动构建等它构建完就可以了~~
还有一些改进的地方,将maven的仓库映射宿主机上去,这样每重启就不用再重新下包了,该流程是一个很简易的流程给大家一个引子但也满足一些需求,想要更加灵活能更加响应复杂的业务场景的话,可以去了解 jenkins pipline
和 salave
这个就不在文中提及了涉及知识的广度会比较多
上一篇:
最好的赞赏
就是你的关注
以上是关于转简易的微服务持续集成方案,SpringBoot+Docker+Jenkins+Gitlab的主要内容,如果未能解决你的问题,请参考以下文章
springboot 微服务之集成RabbitMQ消息中间件
springboot 整合 apache camel实现企业级数据集成和处理