jenkins+docker+rancher+register搭建springCloud持续集成环境
摘要
-
环境准备
-
具体安装步骤
-
jenkins创建job构建springCloud项目发送到镜像仓库
-
rancher添加主机并创建应用部署springCloud项目
-
测试springCloud项目
-
搭建过程注意的事项
一、环境准备
-
准备两台服务器master(192.168.10.17),node1(192.168.10.16)
-
master和node1均安装docker
-
master节点安装java,maven,jenkins,register镜像仓库,rancher
-
jenkins创建job构建springCloud项目发送到镜像仓库
-
rancher添加主机->创建应用->添加服务(启动1-n个容器)
二、具体安装步骤
1.docker安装
https://gitee.com/zhangsike/javaSummary/blob/master/docker/docker安装.md
2.java,maven,jenkins安装
https://gitee.com/zhangsike/javaSummary/blob/master/linux下常用软件安装.md
3.docker官方镜像仓库register安装(harbor镜像库)
https://gitee.com/zhangsike/javaSummary/blob/master/docker/docker私有镜像仓库搭建.md
4.rancher安装配置账号后添加主机
stable稳定版本在生产环境中使用的版本
mkdir -p /home/data/rancher
docker pull rancher/server:stable
docker run -d -p 8088:8080 --restart=always -v /home/data/rancher:/var/lib/mysql rancher/server:stable
提示:最好将rancher数据挂载到外部,这样即使删除rancher再重新创建rancher容器,数据也不会丢失
http:ip:8088访问rancher,等初始化完成
1.系统管理-》系统设置 主机注册地址改成实际地址后保存
2.系统管理访问控制开启开启验证
3.添加主机
基础架构->主机->添加主机:选择custom,
第4步填写IP地址
第5步骤 按照提示操作,等待执行完毕后点击关闭,界面上就出现主机了,主机右上角编辑自定义名称master
重复以上步骤添加node1主机,自定义名称为node1
三、jenkisn创建job构建springCloud项目发送到镜像仓库
新建任务->构建一个maven项目
1.源码管理:svn://gitee.com/zhangsike/springboot-learn/spring-eureka-server
2.触发构建器:轮训SCM 日程表 * * * * *(表示每分钟构建)
3.构建环境: Add timestamps to the Console Output
4.Pre Steps: pom.xml clean package -Dmaven.test.skip=true
5.Post Steps: 选择Run only if build successeds
执行shell
prjName=spring-eureka-server
\cp target/${prjName}-0.0.1-SNAPSHOT.jar ${prjName}-0.0.1-SNAPSHOT.jar
docker build -t ${prjName}:${BUILD_ID} .
docker tag ${prjName}:${BUILD_ID} ${IMAGE_REGISTER}/${prjName}:${BUILD_ID}
docker push ${IMAGE_REGISTER}/${prjName}:${BUILD_ID}
以上shell执行逻辑为: 复制jar包到Dokcerfile所在目录 -> 构建镜像 -> 给镜像打tag- > 推送到镜像仓库
注意:
1.将Dockerfile放到maven项目根目录下和pom.xml同一目录
2.BUILD_ID 为jenkins当前构建号
3.IMAGE_REGISTER 为私有仓库地址,提前设置在jenkins全局变量中
系统管理 -> 系统配置 -> 全局属性 -> 环境变量:设置key为IMAGE_REGISTER,value为192.168.10.17:5000
6.创建好以上项目后复制以上项目继续创建其余项目,一共有5个项目,在https://gitee.com/zhangsike/springboot-learn中,可自己检出
spring-eureka-server 端口7001 账号密码都是admin
spring-cloud-zuul 端口7000
springboot-service-a 端口7005
springboot-service-b 端口7008
springboot-service-c 端口80
注意: 项目中注册中心的地址是192.168.10.17:7001,请自行修改
7.构建各个项目
正常构建完成后可查看私有仓库已经有镜像了
#在客户端查看镜像仓库中的所有镜像
curl http://192.168.10.17:5000/v2/_catalog
[root@slave2 ~]# curl http://192.168.10.17:5000/v2/_catalog
{"repositories":["spring-cloud-zuul","spring-eureka-server","springboot-demo","springboot-service-a","springboot-service-b","springboot-service-c"]}
#查看tag(或版本)
curl http:ip:5000/v2/your-image-name/tags/list
使用joxit/docker-registry-ui查看
各个版本的镜像
四、rancher添加主机并创建应用部署springCloud项目
1.新建一个rancher应用
点击应用 -> 用户 -> 添加应用
填写名称后直接创建,先不上传编排文件
2.在应用中添加服务
进入刚创建的应用-》添加服务
1.添加注册中心服务,调度项选择在指定的主机上运行全部容器
2.按照上面的步骤添加zuul网关步骤
3.添加业务服务b,运行2个容器(注意不需要映射主机端口)
4.按照上面的方法继续添加springboot-service-a和springboot-service-c,运行一个容器即可,调度项选择为每个容器选择符合调度规则的主机
如上图所示rancher会自动为我们选择一个合适的主机创建容器
5.运行完毕后效果图如下
五、测试springCloud项目
1.所有服务都正常运行了,访问注册中心,并通过网关访问测试
http:192.168.10.17:7001 admin admin
所有服务都注册到注册中心了,springboot-service-b有2个实例跟容器个数一致
2.通过浏览器访问服务a,b,c
1.访问服务a
http://192.168.10.17:7000/api-a/test
2.访问服务c
http://192.168.10.17:7000/api-c/test
3.访问服务b测试zuul网关负载均衡
多刷新几次,观察打印的ip和端口,两个springboot-service-b实例均被访问了,zuul负载均衡成功
http://192.168.10.17:7000/api-b/test
4.访问服务b,服务b中feign调用服务a的方法
六、搭建过程中的注意事项
1.springCloud 注册中心客户端配置必须按照以下方式写,否则会因为容器注册的ip是一个随机字符串而无法访问
spring.application.name=xxxx 注意项目配置应用名以方便网关中以serviceID转发
eureka.instance.prefer-ip-address=true
eureka.instance.instance-id=${spring.cloud.client.ipAddress}:${spring.application.name}:${server.port}:@project.version@
spring.cloud.client.ipAddress为IP
@project.version@为jar包版本
例如 10.42.213.34:spring-boot-service-b:7008:0.0.1-SNAPSHOT
2.注册中心eureka必须固定IP地址/域名,固定端口配置,不可使用docker随机内部IP
3.网关zuul作为唯一入口必须以域名或者固定IP,不可使用docker内部随机IP
4.在rancher上创建服务时刻选择调度规则,指定主机或者让rancher自动为我们选择合适的主机(创建eureka和zuul时要指定主机,其余业务服务选择让系统自动选择合适的主机)
5.使用docker官方register不安全访问(http)方式时要在所有节点docker仓库中添加仓库并重启docker,否则
在/etc/docker/daemon.json中加入 "insecure-registries" : ["192.168.10.17:5000"]"
{
"registry-mirrors": ["http://hub-mirror.c.163.com"],
"insecure-registries" : ["192.168.10.17:5000"]
}
6.使用docker-registry-ui查看registry需要在registry中配置跨域访问,详见上面registry安装
7.最好将rancher的数据挂载到主机上,防止删除rancher数据丢失
到这里jenkins+register+rancher+docker搭建springCloud持续集成环境教程就完毕了,后续还有问题继续补充