月泉的博客

简易的持续集成方案,SpringBoot+Docker+Jenkins+Gitlab

字数统计: 1.4k阅读时长: 5 min
2018/03/27 Share

本来想写一篇企业级通用的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服务器的接口

创建一个仓库,然后将项目推送至该仓库,这个不用写在文章里了吧,应该都会。

好,开始进入正题,进入正题之前请确保你已经安装了dockerdocker-compose
首先创建一个jenkins文件夹
然后将我GayHub仓库的docker-compsoe.yml下下来,为了方便我已经将镜像提交到了Docker仓库,如果你没有配置加速或者其它的一些方式的话,你可以自行下载Dockerfile文件进行build

1
2
3
4
5
mkdir jenkins && cd jenkins

wget https://raw.githubusercontent.com/yuequan1997/docker-jenkins/master/docker-compose.yml

docker-compose up -d

使用docker ps检查下容器运行起来了没有

然后

1
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配置这时候点链接进去配置一下

我这里为了简单,没有去配地址,用的自动安装,如果不想自动安装可以去掉这个选项然后输入MAVEN_HOME就可以了

配置好了后回来,我的配置内容如下,我是使用了docker-maven-plugin插件来做的镜像编译和推送

我的pom.xml插件配置如下

然后设置

添加一个

= = 去系统管理=》系统设置,添加个SSH Server

先进入Docker容器内生成执行ssh-keygen生成SSH秘钥对,如果你确定要用这套流程的话,请将~/.ssh挂载,不然每次重启都会丢失 = =

1
2
docker exec -it 容器ID bash
ssh-keygen

然后再将生成的公钥加到你的应用服务器中去,然后再到应用服务器下创建一个目录为releases

配置完后可以点击Test Configuration进行测试

设置完后继续回到任务中进行配置

我应用服务器的deploy.sh脚本内容如下

1
2
3
4
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-plugin1.0的版本以后会默认的去读你的Docker配置,来进行仓库的推送,这里我演示是用的阿里云的镜像仓库,如果不想自己搭的话也可以去使用阿里云。

我推送到master分支,如果你是内网的话 = = git访问不到你的jenkins机器的话,你自己点立即构建

开始了自动构建

等它构建完就可以了~~

还有一些改进的地方,将maven的仓库映射宿主机上去,这样每重启就不用再重新下包了,该流程是一个很简易的流程给大家一个引子但也满足一些需求,想要更加灵活能更加响应复杂的业务场景的话,可以去了解jenkins piplinesalave这个就不在文中提及了涉及知识的广度会比较多

原文作者:yuequan

原文链接:http://www.lunaspring.com/2018/03/27/simple_ci_cd/

发表日期:March 27th 2018, 6:04:25 pm

更新日期:June 20th 2019, 4:10:08 pm

版权声明:© 月泉 - 邓亮泉 版权所有

CATALOG