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

  • 相关阅读:
    分布式全局ID生成器设计
    对volatile不具有原子性的理解
    理解单链表的反转(java实现)
    Spring Boot 自定义kafka 消费者配置 ContainerFactory最佳实践
    Java 重载方法的匹配规则-含有变长参数方法的匹配
    为什么会产生jar包冲突,如何排查jar包冲突?
    SpringBoot 整合mongoDB并自定义连接池
    Java使用Optional与Stream来取代if判空逻辑(JDK8以上)
    多级树的深度优先遍历与广度优先遍历(Java实现)
    Maven pom.xml 全配置(一)常用配置
  • 原文地址:https://www.cnblogs.com/zincredible/p/12144317.html
Copyright © 2020-2023  润新知