若依微服务集群搭建及jenkins自动化集群部署
官方文档地址
https://doc.ruoyi.vip/ruoyi-cloud/
nacos-linux版2.0.3下载路径(需要积分哦)
https://download.csdn.net/download/qq_36249132/47930186
基础说明:
拉取代码、查看API等就不详细说了,网上一抓一大把,而且官网文档描写的很详细了,这里主要记录一下自己搭建时修改的配置和遇到的一些问题
准备工作需求:
JDK >= 1.8 (推荐1.8版本)
Mysql >= 5.7.0 (推荐5.7版本)
Redis >= 3.0
Maven >= 3.0
nacos >= 2.0.3
nacos和yml配置修改
- nacos集群配置,参考
https://blog.csdn.net/weixin_44187730/article/details/104552937 - 若依中修改bootstrap.yml中nacos集群的配置,这里为网管服务范例
# Tomcat
server:
port: 8080
# Spring
spring:
application:
# 应用名称
name: betp-gateway
profiles:
# 环境配置
active: dev
main:
allow-bean-definition-overriding: true
cloud:
nacos:
discovery:
# 服务注册地址
server-addr: 172.27.2.42:8848,172.27.2.43:8848,172.27.2.44:8848
config:
# 配置中心地址
server-addr: 172.27.2.42:8848,172.27.2.43:8848,172.27.2.44:8848
# 配置文件格式
file-extension: yml
# 共享配置
shared-configs:
- application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
sentinel:
# 取消控制台懒加载
eager: true
transport:
# 控制台地址
dashboard: 127.0.0.1:8718
# nacos配置持久化
datasource:
ds1:
nacos:
server-addr: 172.27.2.42:8848,172.27.2.43:8848,172.27.2.44:8848
dataId: sentinel-betp-gateway
groupId: DEFAULT_GROUP
data-type: json
rule-type: flow
- nacos连接的数据库,修改数据库(ry-config)中config_info表的配置(网管服务配置范例):
主要修改的数据为:redis、mysql配置和自己业务系统中需要的其他配置
spring:
redis:
host: 172.27.2.6
port: 6379
password:
# 连接超时时间
timeout: 10s
lettuce:
pool:
# 连接池中的最小空闲连接
min-idle: 0
# 连接池中的最大空闲连接
max-idle: 8
# 连接池的最大数据库连接数
max-active: 8
# #连接池最大阻塞等待时间(使用负值表示没有限制)
max-wait: -1ms
cloud:
gateway:
discovery:
locator:
lowerCaseServiceId: true
enabled: true
routes:
# 认证中心
- id: ruoyi-auth
uri: lb://ruoyi-auth
predicates:
- Path=/auth/**
filters:
# 验证码处理
- CacheRequestFilter
- ValidateCodeFilter
- StripPrefix=1
# 代码生成
- id: ruoyi-gen
uri: lb://ruoyi-gen
predicates:
- Path=/code/**
filters:
- StripPrefix=1
# 定时任务
- id: ruoyi-job
uri: lb://ruoyi-job
predicates:
- Path=/schedule/**
filters:
- StripPrefix=1
# 系统模块
- id: ruoyi-system
uri: lb://ruoyi-system
predicates:
- Path=/system/**
filters:
- StripPrefix=1
# 文件服务
- id: ruoyi-file
uri: lb://ruoyi-file
predicates:
- Path=/file/**
filters:
- StripPrefix=1
# 安全配置
security:
# 验证码
captcha:
enabled: true
type: math
# 防止XSS攻击
xss:
enabled: true
excludeUrls:
- /system/notice
# 不校验白名单
ignore:
whites:
- /auth/logout
- /auth/login
- /auth/register
- /*/v2/api-docs
- /csrf
遇到的一些问题及查找方案
- 本地启动后提示9848问题
思路:查看本机防火墙是否关闭
服务器nacos是否linux版本
服务器nacos和若依依赖nacosjar包是否对应 - xml文件放在common层后启动不识别
修改config_info中对应服务配置文件mybatis
若依初始配置只支持当前项目
mybatis:
# 搜索指定包别名
typeAliasesPackage: com.ruoyi
# 配置mapper的扫描,找到所有的mapper.xml映射文件
mapperLocations: classpath*:/mapper/**/*Mapper.xml
致此若依微服务本地应该就可以启动了,接下来就是使用jenkins进行自动化编译了
jenkins自动化编译
首先需要的插件(必须)
Extended Choice Parameter
SSH Pipeline Steps
maven,git之类的就不说了
安装上述插件之后,开始新建流水线任务
选择流水线的类型
丢弃旧的构建,这个在开始配置时可不配置,之后配置上比较好
选择参数化构建过程,添加可编译的git分支名称
选择Extended Choice Parameter
配置微服务项目
配置服务器集群,同微服务配置
直接下拉到最后配置编译流程(主要)
配置完成之后基本上就完成了,可以开始编译了
文件配置如下:
//git凭证ID
def git_auth = "sdafsdf-345-4cde-a65f-9feca64a1984"
//git的url地址
def git_url = "http://172.16.30.213/betp-cloud.git"
node {
//获取当前选择的项目名称
def selectedProjectNames = "${betp_cloud}".split(",")
//获取当前选择的服务器名称
def selectedServers = "${betp_server}".split(",")
sh "echo 编译微服务:${selectedProjectNames}"
sh "echo 服务器:${selectedServers}"
stage('拉取代码') {
checkout([$class: 'GitSCM', branches: [[name: "*/${branch}"]], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: "${git_auth}", url: "${git_url}"]]])
}
stage('编译,安装公共子工程') {
sh "mvn -f betp-common clean install"
}
stage('编译,打包微服务工程') {
for(int i=0;i<selectedProjectNames.length;i++){
//tensquare_eureka_server@10086
def currentProjectName = selectedProjectNames[i];
sh "mvn -f ${currentProjectName} clean package"
}
}
// 传送jar到目标机器
stage('SSH上传jar包到服务器集群') {
//遍历所有服务器,分别部署
for(int j=0;j<selectedServers.length;j++){
//获取当前遍历的服务器名称
def currentServerName = selectedServers[j]
//定义远程机器,可定义多个
def remote = [:]
remote.name = "${currentServerName}"
remote.host = "${currentServerName}"
remote.user = 'root'
remote.password = '123456'
remote.allowAnyHosts = true
//获取微服务jar目录
for(int i=0;i<selectedProjectNames.length;i++){
//tensquare_eureka_server@10086
def currentProjectName = selectedProjectNames[i];
sh "echo 删除${currentProjectName}.jar"
sshCommand remote: remote, command: "sh /home/betp/clean.sh ${currentProjectName} ${currentProjectName}"
sh "echo 上传${currentProjectName}.jar"
sshPut remote: remote, from: "${currentProjectName}/target/${currentProjectName}.jar", into: "/home/betp/${currentProjectName}"
sh "echo 启动${currentProjectName}.jar"
sshCommand remote: remote, command: "sh /home/betp/start.sh ${currentProjectName} ${currentProjectName}"
}
}
}
}
关于配置的一些情况可参考:https://www.it610.com/article/1282486389262270464.htm
start.sh
#!/bin/bash
projectInfo=$1
currentProjectName=$2
echo "stop SpringBoot ${currentProjectName}"
pid=`ps -ef | grep java | grep ${currentProjectName} | grep -v grep | awk '{print $2}'`
echo "${currentProjectName} pid : ${pid}"
if [[ $pid != "" ]] && [[ $pid > 0 ]];then
kill $pid
sleep 3
fi
echo "stop SpringBoot ${currentProjectName} over"
echo "start SpringBoot ${currentProjectName}"
nohup java -jar /home/betp/${projectInfo}/${currentProjectName}.jar > /home/betp/logs/${currentProjectName}.log 2>&1 &
echo "start SpringBoot ${currentProjectName} success"