Jenkins+Docker+SpringCloud微服务持续集成之集群部署

这篇具有很好参考价值的文章主要介绍了Jenkins+Docker+SpringCloud微服务持续集成之集群部署。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、集群部署流程说明

Jenkins+Docker+SpringCloud微服务持续集成之集群部署

 文章来源地址https://www.toymoban.com/news/detail-470959.html

环境配置

#环境配置
hostnamectl set-hostname web2-server && su
systemctl stop firewalld
systemctl disable firewalld

vim /etc/selinux/config
SELINUX=disabled

vim /etc/resolv.conf
nameserver 114.114.114.114

#安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2

#设置阿里云镜像源
cd /etc/yum.repos.d/
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

#安装 docker-ce 社区版
yum install -y docker-ce
systemctl start docker
systemctl enable docker

#配置镜像加速,官方网址可参考:https://help.aliyun.com/document_detail/60750.html
mkdir -p /etc/docker
#直接命令行输入以下内容:

tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://t466r8qg.mirror.aliyuncs.com"]
}
EOF

#把Harbor地址加入到Docker信任列表(harbor仓库的docker中不需要配)
vim /etc/docker/daemon.json 

{
  "registry-mirrors": ["https://t466r8qg.mirror.aliyuncs.com"],
"insecure-registries": ["192.168.8.20:85"]
}

systemctl daemon-reload                         
systemctl restart docker                        

#网络优化
vim /etc/sysctl.conf
net.ipv4.ip_forward=1

sysctl -p
systemctl restart network
systemctl restart docker
docker version                          

二、修改idea中微服务配置

2.1 注册中心配置

idea中修改注册中心eureka的配置,单节点换成集群

Jenkins+Docker+SpringCloud微服务持续集成之集群部署

 

# 集群版
spring:
  application:
    name: EUREKA-HA


---
server:
  port: 10086
spring:
  # 指定profile=eureka-server1
  profiles: eureka-server1
eureka:
  instance:
    # 指定当profile=eureka-server1时,主机名是eureka-server1
    hostname: 192.168.8.17
  client:
    service-url:
      # 将自己注册到eureka-server1、eureka-server2这个Eureka上面去
      defaultZone: http://192.168.8.17:10086/eureka/,http://192.168.8.16:10086/eureka/

---
server:
  port: 10086
spring:
  profiles: eureka-server2
eureka:
  instance:
    hostname: 192.168.8.16
  client:
    service-url:
      defaultZone: http://192.168.8.17:10086/eureka/,http://192.168.8.16:10086/eureka/

在启动微服务的时候,加入参数: spring.profiles.active 来读取对应的配置

2.2 其他微服务配置

  • 网关服务配置
      defaultZone: http://192.168.8.17:10086/eureka/,http://192.168.8.16:10086/eureka/ # Eureka访问地址

Jenkins+Docker+SpringCloud微服务持续集成之集群部署

 

  • 权限管理配置
      defaultZone: http://192.168.8.17:10086/eureka,http://192.168.8.16:10086/eureka

Jenkins+Docker+SpringCloud微服务持续集成之集群部署

 

  • 业务模块配置
      defaultZone: http://192.168.8.17:10086/eureka,http://192.168.8.16:10086/eureka

Jenkins+Docker+SpringCloud微服务持续集成之集群部署

 

2.3 提交已修改的配置

Jenkins+Docker+SpringCloud微服务持续集成之集群部署

 Jenkins+Docker+SpringCloud微服务持续集成之集群部署

Jenkins+Docker+SpringCloud微服务持续集成之集群部署 

Jenkins+Docker+SpringCloud微服务持续集成之集群部署

三、设计Jenkins集群项目的构建参数

3.1 安装Extended Choice Parameter插件

该插件可以支持多选框

Jenkins+Docker+SpringCloud微服务持续集成之集群部署

 

3.2 创建流水线项目

Jenkins+Docker+SpringCloud微服务持续集成之集群部署

 Jenkins+Docker+SpringCloud微服务持续集成之集群部署

 

3.3 配置项目参数

Jenkins+Docker+SpringCloud微服务持续集成之集群部署

 Jenkins+Docker+SpringCloud微服务持续集成之集群部署

Jenkins+Docker+SpringCloud微服务持续集成之集群部署

逗号必须得是英文,否则出错

tensquare_eureka_server@10086,tensquare_zuul@10020,tensquare_admin_service@9001,tensquare_gathering@9002

 Jenkins+Docker+SpringCloud微服务持续集成之集群部署

Jenkins+Docker+SpringCloud微服务持续集成之集群部署 

 

3.4 测试代码循环构建

  • 循环测试代码检查

Jenkins+Docker+SpringCloud微服务持续集成之集群部署

Jenkins+Docker+SpringCloud微服务持续集成之集群部署 

Jenkins+Docker+SpringCloud微服务持续集成之集群部署 

Jenkins+Docker+SpringCloud微服务持续集成之集群部署 

Jenkins+Docker+SpringCloud微服务持续集成之集群部署 

Jenkins+Docker+SpringCloud微服务持续集成之集群部署 

  • 循环打包编译

Jenkins+Docker+SpringCloud微服务持续集成之集群部署

     //添加公共子工程
     stage('make install public sub project') {
            sh "mvn -f tensquare_common clean install"
     }
     //编译打包微服务,制作镜像
     stage('make package') {
        for (int i=0;i<selectedProjectNames.length;i++){
            //项目名称tensquare_eureka_server@10086
            def projectInfo=selectedProjectNames[i]

            //当前项目名称
            def currentProjectName=projectInfo.split("@")[0]
            //当前端口
            def currentProjectPort=projectInfo.split("@")[1]

            sh "mvn -f ${currentProjectName} clean package dockerfile:build"
            //定义镜像名称
            def imageName="${currentProjectName}:${tag}"
            //对镜像打标签
            sh "docker tag ${imageName} ${harbor_url}/${harbor_name}/${imageName}"
            //镜像推送到harbor
            withCredentials([usernamePassword(credentialsId: "${harbor_auth}", passwordVariable: 'password', usernameVariable: 'username')]) {
                //登录harbor
                sh "docker login -u ${username} -p ${password} ${harbor_url}"
                //镜像上传
                sh "docker push ${harbor_url}/${harbor_name}/${imageName}"
                sh "echo 镜像上传成功"
            }
        }
            //部署应用
            sshPublisher(publishers: [sshPublisherDesc(configName: "master_server", transfers: [sshTransfer(cleanRemote: false, excludes: "", execCommand: "/opt/jenkins_shell/deploy.sh ${harbor_url} ${harbor_name} ${project_name} ${tag} ${port}", execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: "[, ]+", remoteDirectory: "", remoteDirectorySDF: false, removePrefix: "", sourceFiles: "")], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
     }
 }

Jenkins+Docker+SpringCloud微服务持续集成之集群部署 Jenkins+Docker+SpringCloud微服务持续集成之集群部署

Jenkins+Docker+SpringCloud微服务持续集成之集群部署 

Jenkins+Docker+SpringCloud微服务持续集成之集群部署 

Jenkins+Docker+SpringCloud微服务持续集成之集群部署  

 

四、完成微服务多服务器远程发布

4.1 配置远程部署服务器

从Jenkins服务器拷贝公钥到docker2远程服务器

ssh-copy-id 192.168.8.16

Jenkins+Docker+SpringCloud微服务持续集成之集群部署 Jenkins+Docker+SpringCloud微服务持续集成之集群部署

4.2 Jenkins中添加远程服务器

系统配置中添加远程服务器

Jenkins+Docker+SpringCloud微服务持续集成之集群部署

Jenkins+Docker+SpringCloud微服务持续集成之集群部署

4.3 修改Docker配置信任Harbor私服地址

vim /etc/docker/daemon.json

{
  "registry-mirrors": ["https://t466r8qg.mirror.aliyuncs.com"],
"insecure-registries": ["192.168.8.20:85"]
}

systemctl restart docker

4.4 项目配置参数

添加构建参数——》多选框:部署服务器

Jenkins+Docker+SpringCloud微服务持续集成之集群部署

Jenkins+Docker+SpringCloud微服务持续集成之集群部署 

Jenkins+Docker+SpringCloud微服务持续集成之集群部署 

Jenkins+Docker+SpringCloud微服务持续集成之集群部署 

4.5 修改Jenkinsfile构建脚本

//定义gitlab的凭证
 def git_auth="03757112-b3bd-4955-93ef-ad84869f39a9"
 //定义gitlab的URL路径
 def git_url="git@192.168.8.18:gl/tensquare_back.git"

//镜像标签
def tag="latest"
//harbor的url地址
def harbor_url="192.168.8.20:85"
//镜像仓库名
def harbor_name="tensquare"
//harbor凭证
def harbor_auth="778a9460-c68d-4ab6-ab7f-f5113ec3a900"

 node {
     //选择的微服务项目名称
     def selectedProjectNames="${project_name}".split(",")
     //获取当前选择服务器
     def selectedServers="${publish_server}".split(",")

     stage('pull code') {
         checkout([$class: 'GitSCM', branches: [[name: "*/${branch}"]], extensions: [], userRemoteConfigs: [[credentialsId: "${git_auth}", url: "${git_url}"]]])
    }
     stage('check code') {

     //循环检查
     for (int i=0;i<selectedProjectNames.length;i++){
         //项目名称tensquare_eureka_server@10086
         def projectInfo=selectedProjectNames[i]

         //当前项目名称
         def currentProjectName=projectInfo.split("@")[0]
         //当前端口
         def currentProjectPort=projectInfo.split("@")[1]


          //定义SonarQubeScanner工具
          def scannerHome = tool 'sonar-scanner'
          //引用SonarQube系统环境
          withSonarQubeEnv('sonarqube') {
          sh """
              cd ${currentProjectName}
              ${scannerHome}/bin/sonar-scanner
             """
          }
     }

     }
     //添加公共子工程
     stage('make install public sub project') {
            sh "mvn -f tensquare_common clean install"
     }
     //编译打包微服务,制作镜像
     stage('make package') {
        for (int i=0;i<selectedProjectNames.length;i++){
            //项目名称tensquare_eureka_server@10086
            def projectInfo=selectedProjectNames[i]

            //当前项目名称
            def currentProjectName=projectInfo.split("@")[0]
            //当前端口
            def currentProjectPort=projectInfo.split("@")[1]

            sh "mvn -f ${currentProjectName} clean package dockerfile:build"
            //定义镜像名称
            def imageName="${currentProjectName}:${tag}"
            //对镜像打标签
            sh "docker tag ${imageName} ${harbor_url}/${harbor_name}/${imageName}"
            //镜像推送到harbor
            withCredentials([usernamePassword(credentialsId: "${harbor_auth}", passwordVariable: 'password', usernameVariable: 'username')]) {
                //登录harbor
                sh "docker login -u ${username} -p ${password} ${harbor_url}"
                //镜像上传
                sh "docker push ${harbor_url}/${harbor_name}/${imageName}"
                sh "echo 镜像上传成功"
            }
            //遍历所有服务器,分别部署
            for (int j=0;j<selectedServers.length;j++){
                //获取当前服务器名称
                def currentServerName=selectedServers[j]
                //调用不同服务器模块内容--spring.profiles.active=eureka-server1/eureka-server2
                def activeProfile="--spring.profiles.active="

                //根据不同的服务器名称调用不同的服务器配置信息
                if (currentServerName=="master_server"){
                    activeProfile=activeProfile+"eureka-server1"
                }else if (currentServerName=="slave_server"){
                    activeProfile=activeProfile+"eureka-server2"
                }
            //部署应用
                sshPublisher(publishers: [sshPublisherDesc(configName: "${currentServerName}", transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: "/opt/jenkins_shell/deployCluster.sh ${harbor_url} ${harbor_name} ${currentProjectName} ${tag} ${currentProjectPort} ${activeProfile}", execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
            }
        }
    }
}

推送上传gitlab

Jenkins+Docker+SpringCloud微服务持续集成之集群部署

Jenkins+Docker+SpringCloud微服务持续集成之集群部署 

 

4.6 编写部署脚本

编写deployCluster.sh部署脚本,放到两台生产服务器中路径:
/opt/jenkins_shell/deployCluster.sh

Jenkins+Docker+SpringCloud微服务持续集成之集群部署

Jenkins+Docker+SpringCloud微服务持续集成之集群部署

4.7 进行构建测试

Jenkins+Docker+SpringCloud微服务持续集成之集群部署

可以看到构建成功

 Jenkins+Docker+SpringCloud微服务持续集成之集群部署

 

查看容器发布结果

Jenkins+Docker+SpringCloud微服务持续集成之集群部署

 Jenkins+Docker+SpringCloud微服务持续集成之集群部署

查看eureka注册结果

Jenkins+Docker+SpringCloud微服务持续集成之集群部署

Jenkins+Docker+SpringCloud微服务持续集成之集群部署

4.8 构建剩下的集群微服务

Jenkins+Docker+SpringCloud微服务持续集成之集群部署

Jenkins+Docker+SpringCloud微服务持续集成之集群部署 

Jenkins+Docker+SpringCloud微服务持续集成之集群部署 

Jenkins+Docker+SpringCloud微服务持续集成之集群部署 

Jenkins+Docker+SpringCloud微服务持续集成之集群部署 

Jenkins+Docker+SpringCloud微服务持续集成之集群部署 

 

五、Nginx+Zuul 集群实现高可用网关

Jenkins+Docker+SpringCloud微服务持续集成之集群部署

 

5.1 web2-server服务器上安装nginx

yum install epel-release.noarch -y
yum install -y nginx

5.2 修改nginx配置文件

vim /etc/nginx/nginx.conf

#37行出添加反向代理服务器池,42行出修改端口号
 36     include /etc/nginx/conf.d/*.conf;
 37     upstream zuulServer{
 38         server 192.168.8.16:10020 weight=1;
 39         server 192.168.8.17:10020 weight=1;
 40     }
 41     server {
 42         listen       85;
 43         listen       [::]:85;
 44         server_name  _;
 45         root         /usr/share/nginx/html;

#49行出添加反向代理指向服务器池
 48         include /etc/nginx/default.d/*.conf;
 49         location / {
 50           proxy_pass http://zuulServer/;
 51         }
nginx -t
systemctl start nginx.service 

Jenkins+Docker+SpringCloud微服务持续集成之集群部署

Jenkins+Docker+SpringCloud微服务持续集成之集群部署 

 

5.3 修改前端Nginx的访问地址

Jenkins+Docker+SpringCloud微服务持续集成之集群部署 

Jenkins+Docker+SpringCloud微服务持续集成之集群部署 

Jenkins+Docker+SpringCloud微服务持续集成之集群部署 

Jenkins+Docker+SpringCloud微服务持续集成之集群部署 

Jenkins+Docker+SpringCloud微服务持续集成之集群部署 

Jenkins+Docker+SpringCloud微服务持续集成之集群部署 

5.4 Jenkins中进行前端项目构建

Jenkins+Docker+SpringCloud微服务持续集成之集群部署

Jenkins+Docker+SpringCloud微服务持续集成之集群部署 

 

成功访问前端数据库中的数据

Jenkins+Docker+SpringCloud微服务持续集成之集群部署

 

到了这里,关于Jenkins+Docker+SpringCloud微服务持续集成之集群部署的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringBoot+Docker+Git+Jenkins实现简易的持续集成和持续部署

    努力了这么久,但凡有点儿天赋,也该有些成功的迹象了。 本篇文章引导你使用 Jenkins 部署 SpringBoot 项目,同时使用 Docker 和 Git 实现简单的持续集成和持续部署。(项目地址:sso-merryyou) 流程图如下: push 代码到 Github 触发 WebHook 。(因网络原因,本篇使用gitee) Jenkins 从仓库拉去

    2024年02月21日
    浏览(28)
  • k8s的jenkins部署java项目到k8s集群cicd持续集成

    k8s1.16.0-k8s的jenkins部署java项目到k8s集群cicd(ci成,cd手动部署的) 注意: 本文档只是实现了ci,cd是通过ci生成的镜像,再手工再k8s-master执行的部署(只因pod部署的jenkins连接k8s的认证不知怎么操作,若jenkins是单独部署在k8s-master机器上,能直接在master执行kubectl命令就没这个问题了

    2024年02月03日
    浏览(37)
  • docker+k8s+jenkins+harbor持续集成自动化部署

    另外一篇文章有讲docker的安装与相关配置,暂时就不讲了 1、关闭防火墙并修改主机名 2、永久禁用swap 用#注释掉swap一行(新版centos已经默认禁用) 3、配置镜像加速 到阿里云获取自己镜像加速地址 4、安装 docker-compose 官网找到下载地址 https://github.com/docker/compose/releases 版本地址

    2024年02月08日
    浏览(35)
  • 一文完成Jenkins+Docker+Git(多分支构建)打包、部署,实现可持续化集成

    官网:Jenkins官网 参考:Jenkins简介 Jenkins是一个开源软件项目,起源于Hudson(Hudson是商用的),是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件项目可以进行持续集成 可在Tomcat等流行的servlet容器中运行,也可独立运

    2024年01月18日
    浏览(55)
  • .NET Core部署到linux(CentOS)最全解决方案,入魔篇(使用Docker+Jenkins实现持续集成、自动化部署)

    通过前面三篇: .NET Core部署到linux(CentOS)最全解决方案,常规篇 .NET Core部署到linux(CentOS)最全解决方案,进阶篇(Supervisor+Nginx) .NET Core部署到linux(CentOS)最全解决方案,高阶篇(Docker+Nginx 或 Jexus) 通过前面三篇文章的介绍,我们已经对.net core多方案部署到linux下有了非常全面的认识

    2024年02月02日
    浏览(34)
  • Jenkins K8S Docker 一键部署SpringCloud微服务

    一键部署springcloud微服务,需要用到 Jenkins K8S Docker等工具,若未安装,请参考《Centos 7 安装K8S》 本文使用jenkins部署,流程如下图 开发者将代码push到git 运维人员通过jenkins部署,自动到git上pull代码 通过maven构建代码 将maven构建后的jar打包成docker镜像 并 push docker镜像到docker

    2024年02月02日
    浏览(26)
  • 【Jenkins】持续集成部署学习

    Gitlab用的端口是80,可能会跟其它应用冲突,并且Gitlab所需内存也很大,所以还是单独放在一个服务器上比较好。 用原来空的虚拟机服务器克隆一个,注意内存要选大一点,6G左右 (1)ip a / ip addr / ifconfig 不显示ip问题 (1)查看系统的内核版本 执行命令:uname -r 注意:x86

    2024年02月11日
    浏览(25)
  • Docker搭建Jenkins持续集成

    目录 注意 前提条件  一、安装Docker 1.1、检查并清楚系统残余项,并安装Docker环境  1.2、安装下载Docker依赖的工具  1.3、添加清华软件源  1.4、更新yum缓存  1.5、安装Docker(CE-社区版) 1.6、 启动Docker 1.7、Docker设置开机自启 二、下载Jenkins镜像  2.1、挂载目录 2.2、启动镜像

    2024年01月25日
    浏览(33)
  • 史上最全从0到1搭建最新版本jenkins可持续集成,整合git和maven部署微服务自动构建发版,抓紧收藏起来吧!

    好文推荐: netty搭建websocket集群(高性能.,高并发) springboot 实现延时队列(超级实用) 2.5万字讲解DDD领域驱动设计(史上最全DDD) 传统的软件开发在系统上线的时候需要手动进行,这个过程可能相对繁琐和容易出错,发布过程如下: 代码构建:开发人员在本地环境中编写

    2024年04月13日
    浏览(30)
  • jenkins+docker集成harbor实现可持续集成

    目录 一、前言 二、Harbor介绍 2.1 什么是Harbor 2.1.1 Harbor架构图 2.2 Harbor 特征 2.3 Harbor 核心组件 2.4 Harbor使用场景 三、Harbor部署 3.1 安装docker compose 3.1.1 安装方式一 3.2 基于python3 pip安装docker compose 3.2.1 安装python3 3.2.2 安装python-pip3并升级 3.2.3 执行命令安装 docker-compose 3.2.4 查看d

    2024年04月15日
    浏览(24)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包