Jenkins 微服务自动化构建部署方案

Jenkins 微服务自动化构建部署方案(最终版)

一、项目背景

项目类型:Maven 多模块微服务项目

构建机器:Windows

部署机器:Linux

构建要求:

支持单个 / 多个 / 全量服务指定构建

只构建目标服务及其依赖,不打包无关模块

强制跳过单元测试,提升构建速度

杜绝 Jenkins 二次全量打包问题

构建产物可正常启动运行

二、服务映射配置

  1. 服务名称与模块路径
    表格
    务名称 服务模块路径 生成 JAR 包名称
    ateway ./yudao-gateway yudao-gateway.jar
    ystem ./yudao-module-system/yudao-module-system-server yudao-module-system-server.jar
    nfra ./yudao-module-infra/yudao-module-infra-server yudao-module-infra-server.jar
    pm ./yudao-module-bpm/yudao-module-bpm-server yudao-module-bpm-server.jar
  2. 服务器部署目录
    plaintext
    /root/usr/local/jar/yudaocloud
    三、Jenkins 关键配置(必看)
  3. 构建参数配置
    参数类型:String Parameter
    Name:MODULES
    Default Value:all
    描述:
    plaintext
    all = 构建全部服务
    单个服务:gateway/system/infra/bpm
    多个服务:gateway,system
  4. 构建核心配置(解决二次打包)
    Root POM:pom.xml
    Goals and options:help:help(关键:避免 Jenkins 自动执行二次全量构建)
    四、完整构建脚本(Windows 执行)
    Pre Steps 脚本(直接复制使用)
    batch
    @echo off
    setlocal enabledelayedexpansion

:: ===================== 【微服务映射配置】 =====================

set "ALL_SERVICES=gateway,system,infra,bpm"

set "MAP_gateway=./yudao-gateway"

set "MAP_system=./yudao-module-system/yudao-module-system-server"

set "MAP_infra=./yudao-module-infra/yudao-module-infra-server"

set "MAP_bpm=./yudao-module-bpm/yudao-module-bpm-server"

:: ===================== 处理构建参数 =====================

if "%MODULES%"=="all" (

set "SELECTED=!ALL_SERVICES!"

) else (

set "SELECTED=!MODULES!"

)

:: ===================== 自动拼接 Maven 构建路径 =====================

set "MODULE_PATHS="

for %%i in ("%SELECTED:,=" "%") do (

set "s=%%~i"

call set "p=%%MAP_!s!%%"

if defined p (

if not "!MODULE_PATHS!"=="" set "MODULE_PATHS=!MODULE_PATHS!,"

set "MODULE_PATHS=!MODULE_PATHS!!p!"

)

)

:: ===================== 执行 Maven 构建 =====================

cd /d "%WORKSPACE%"

echo ========================================================

echo 构建服务:!SELECTED!

echo 构建模块:!MODULE_PATHS!

echo ========================================================

:: 核心构建命令(跳过测试 + 构建指定服务 + 自动构建依赖 + 保证可启动)

mvn -Dmaven.test.skip=true clean package -pl !MODULE_PATHS! -am

:: ===================== 构建结果判断 =====================

if %errorlevel% neq 0 (

echo ============= 构建失败 =============

exit /b 1

)

echo ============= 构建成功 =============

五、Linux 服务部署脚本

  1. SSH 配置
    Source files:*/target/.jar
    Remote directory:/root/usr/local/jar/yudaocloud
  2. 执行命令(部署脚本)
    bash
    运行

!/bin/bash

set -e

===================== 部署配置 =====================

DEPLOY_DIR="/root/usr/local/jar/yudaocloud"

JAR_gateway="yudao-gateway.jar"

JAR_system="yudao-module-system-server.jar"

JAR_infra="yudao-module-infra-server.jar"

JAR_bpm="yudao-module-bpm-server.jar"

mkdir -p ${DEPLOY_DIR}

cd ${DEPLOY_DIR}

服务部署函数

deploy_service() {

service_name=$1

jar_name_var="JAR_${service_name}"

jar_name=${!jar_name_var}

if [ -z "${jar_name}" ]; then
echo "⚠️ 未知服务:${service_name}"
return
fi

echo -e "\n="
echo "🚀 开始部署:${service_name} → ${jar_name}"
echo "
="

停止旧进程

pid=$(ps -ef | grep "${jar_name}" | grep -v grep | awk '{print $2}')
if [ -n "${pid}" ]; then
echo "🛑 停止旧进程:${pid}"
kill -9 ${pid} > /dev/null 2>&1
sleep 2
fi

启动新服务

echo "🔛 启动服务"
nohup java -jar "${jar_name}" > /dev/null 2>&1 &
sleep 3
echo "✅ ${service_name} 部署成功!"

}

批量部署

echo "📋 待部署服务:${MODULES}"

if [ "${MODULES}" = "all" ]; then

for s in gateway system infra bpm; do

deploy_service ${s}

done

else

IFS=',' read -ra LIST <<< "${MODULES}"

for s in "${LIST[@]}"; do

deploy_service ${s}

done

fi

echo -e "\n🎉 全部服务部署完成!"

六、核心命令说明(关键知识点)

  1. Maven 构建命令
    bash
    运行
    mvn -Dmaven.test.skip=true clean package -pl !MODULE_PATHS! -am
    -Dmaven.test.skip=true:强制跳过单元测试(Windows 环境必须放在最前面)
    clean package:清理并打包
    -pl:指定构建模块
    -am:自动构建依赖模块(保证 jar 包可正常启动)
  2. 二次打包解决
    Jenkins Maven 项目默认会自动执行 install
    解决方案:Goals and options 设置为 help:help
    作用:仅打印帮助信息,不执行任何编译、打包操作
    七、使用说明
  3. 构建全部服务
    参数:all
  4. 构建单个服务
    参数:gateway
  5. 构建多个服务
    参数:gateway,system
    八、常见问题与解决方案
  6. 构建时执行单元测试
    原因:-Dmaven.test.skip=true 位置错误
    解决:必须放在命令最开头
  7. 只打指定服务,但无法启动
    原因:缺少依赖模块
    解决:必须保留 -am 参数
  8. Jenkins 二次全量打包
    原因:Maven 项目默认执行 install
    解决:Goals and options 填写 help:help
  9. Windows 中文路径乱码导致编译失败
    解决:项目路径必须全部使用英文,无中文、无空格
    九、最终效果
    ✅ 支持自定义服务构建
    ✅ 跳过测试,构建速度提升 50%+
    ✅ 无二次全量打包
    ✅ 构建产物 100% 可正常启动
    ✅ 自动停止旧进程 + 启动新服务
    ✅ 适用于生产环境自动化部署
posted @ 2026-07-11 11:18  liftsail  阅读(15)  评论(0)    收藏  举报