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

news/2024/11/19 23:31:28/

一、集群部署流程说明

 

环境配置

#环境配置
hostnamectl set-hostname web2-server && su
systemctl stop firewalld
systemctl disable firewalldvim /etc/selinux/config
SELINUX=disabledvim /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=1sysctl -p
systemctl restart network
systemctl restart docker
docker version                          

二、修改idea中微服务配置

2.1 注册中心配置

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

 

# 集群版
spring:application:name: EUREKA-HA---
server:port: 10086
spring:# 指定profile=eureka-server1profiles: eureka-server1
eureka:instance:# 指定当profile=eureka-server1时,主机名是eureka-server1hostname: 192.168.8.17client: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.16client: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访问地址

 

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

 

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

 

2.3 提交已修改的配置

 

 

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

3.1 安装Extended Choice Parameter插件

该插件可以支持多选框

 

3.2 创建流水线项目

 

 

3.3 配置项目参数

 

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

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

 

 

 

3.4 测试代码循环构建

  • 循环测试代码检查

 

 

 

 

 

  • 循环打包编译

     //添加公共子工程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@10086def 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}"//镜像推送到harborwithCredentials([usernamePassword(credentialsId: "${harbor_auth}", passwordVariable: 'password', usernameVariable: 'username')]) {//登录harborsh "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)])}}

 

 

 

  

 

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

4.1 配置远程部署服务器

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

ssh-copy-id 192.168.8.16

 

4.2 Jenkins中添加远程服务器

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

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 项目配置参数

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

 

 

 

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@10086def 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@10086def 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}"//镜像推送到harborwithCredentials([usernamePassword(credentialsId: "${harbor_auth}", passwordVariable: 'password', usernameVariable: 'username')]) {//登录harborsh "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-server2def 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

 

 

4.6 编写部署脚本

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

4.7 进行构建测试

可以看到构建成功

 

 

查看容器发布结果

 

查看eureka注册结果

4.8 构建剩下的集群微服务

 

 

 

 

 

 

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

 

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 

 

 

5.3 修改前端Nginx的访问地址

 

 

 

 

 

 

5.4 Jenkins中进行前端项目构建

 

 

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

 


http://www.ppmy.cn/news/209942.html

相关文章

vr 体验 vr游戏

<<the lab>>是htc value 官方出的vr实验室&#xff0c;里面包含了很多个小游戏&#xff0c;是目前最好的vr体验实例。

ps4虚拟现实VR眼镜入手体验

随着近几年越来越多的资本注入VR行业&#xff0c;市面上VR眼镜的款式和品牌也越来越多&#xff0c;不管是价格高低可以说VR眼镜已经覆盖了中高低端市场&#xff0c;今天小九主要为大家来讲一下ps4虚拟现实VR眼镜的入手体验&#xff0c;为什么要挑选这一款呢?因为市面上很多游戏…

索尼PS4程序升级,令PS VR带来私人3D影院体验

原文标题&#xff1a;索尼PS4程序升级&#xff0c;令PS VR带来私人3D影院体验 从VR技术“复兴”以来&#xff0c;被类比最多的就是此前的3D技术&#xff0c;后者已经随着几大电视厂商正式停产3D电视而寿终正寝。虽然3D电视已经没戏了&#xff0c;但不代表你买的3D蓝光碟也没用了…

Oculus'Quest是第一款真正的VR游戏机

Oculus’Quest是第一款真正的VR游戏机 Oculus VR在周三的年度Connect开发者大会上发布了一个巨大的硬件惊喜&#xff1a;全新的独立Quest虚拟现实耳机。Quest是Oculus过去五年VR工作的总结&#xff0c;Facebook首席执行官马克扎克伯格称这是迈向十亿人进入VR的重要一步。 但第…

java vr 开发_VR:虚拟与现实

​1 周末体验了一把VR眼镜带来的不同乐趣。 给我的直观感受可以用两个字来形容&#xff1a;”颠覆“。 其中的游戏体验可以用2D到3D上升一个维度&#xff0c;3D再到VR再次上升一个维度来形容&#xff0c;完全的沉浸体验&#xff0c;给人身临其境的感觉。 戴上VR眼镜&#xff0c…

索尼PS VR游戏体验汇总 399美元起高端VR究竟值不值得买?

索尼PS VR附带的迷之小黑盒到底是干什么用的&#xff1f; 时隔两年&#xff0c;索尼再次在 GDC&#xff08;游戏开发者大会&#xff09; 展示 PlayStation VR &#xff08;之前叫 Project Morpheus&#xff09;。在 Oculus Rift、HTC Vive 等明星产品纷纷公布售价后&#xff0c…

VR干货:如何将你的游戏上架Oculus PSVR VIVE等平台

016VR产业一片大火&#xff0c;各大厂商纷纷把目光投向VR内容市场&#xff0c;以下就是浪哥为广大开发者统计到的目前最火爆的几个VR平台的审核方式与开发者基本操作指南&#xff0c;一起来看看吧&#xff01;~ HTC开发者&#xff08;VIVE&#xff09; 基本资料提交 ①注册应用…

索尼首次展示PS VR2,加入头盔振动和眼球追踪,配套游戏今年发布

晓查 发自 凹非寺量子位 | 公众号 QbitAI 你买到PS5了吗&#xff1f; 现在连配套PS VR2都要来了。 去年的今天&#xff0c;索尼公布了新的VR眼镜计划&#xff0c;在“故弄玄虚”一年后&#xff0c;PS第二代VR眼镜终于亮相。 从整体上来看&#xff0c;PS VR2使用黑白色搭配&…