jenkins+docker+rancher+register搭建springCloud持续集成环境

摘要

  1. 环境准备
  2. 具体安装步骤
  3. jenkins创建job构建springCloud项目发送到镜像仓库
  4. rancher添加主机并创建应用部署springCloud项目
  5. 测试springCloud项目
  6. 搭建过程注意的事项

一、环境准备

  1. 准备两台服务器master(192.168.10.17),node1(192.168.10.16)
  2. master和node1均安装docker
  3. master节点安装java,maven,jenkins,register镜像仓库,rancher
  4. jenkins创建job构建springCloud项目发送到镜像仓库
  5. 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安装配置账号后添加主机

  官方文档https://rancher.com/docs/rancher/v1.6/zh/

  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持续集成环境教程就完毕了,后续还有问题继续补充

posted @ 2020-01-03 16:28  zincredible  阅读(2174)  评论(0编辑  收藏  举报