若依微服务集群搭建及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配置修改

  1. nacos集群配置,参考
    https://blog.csdn.net/weixin_44187730/article/details/104552937
  2. 若依中修改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

  1. 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

遇到的一些问题及查找方案

  1. 本地启动后提示9848问题
    思路:查看本机防火墙是否关闭
    服务器nacos是否linux版本
    服务器nacos和若依依赖nacosjar包是否对应
  2. 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"

点击如下图所示开始编译

在这里插入图片描述

查看nacos服务列表,显示编译的服务名称表示成功

在这里插入图片描述

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>