From 7118db87c27aedb396072441c0a5d4ac5efa9fdf Mon Sep 17 00:00:00 2001 From: panjunjie <46790855@qq.com> Date: Mon, 11 Aug 2025 13:06:12 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20java-mall-app-shop-admin/J?= =?UTF-8?q?enkinsfile?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- java-mall-app-shop-admin/Jenkinsfile | 186 ++++++++++++++++----------- 1 file changed, 108 insertions(+), 78 deletions(-) diff --git a/java-mall-app-shop-admin/Jenkinsfile b/java-mall-app-shop-admin/Jenkinsfile index 2dd6e8e..6abc930 100644 --- a/java-mall-app-shop-admin/Jenkinsfile +++ b/java-mall-app-shop-admin/Jenkinsfile @@ -1,99 +1,129 @@ pipeline { agent any - + + // 工具配置:指定Node.js版本(需在Jenkins全局工具中预先配置) tools { - nodejs 'NodeJS18' + nodejs "NodeJS18" } environment { - UNIAPP_DIR = 'java-mall-app-shop-admin' - TARGET_PLATFORM = 'h5' - OUTPUT_DIR = "${UNIAPP_DIR}/dist/build/${TARGET_PLATFORM}" - DEPLOY_PATH = '/data/nginx/www/uniapp-h5' + // 项目核心路径配置 + UNI_APP_DIR = "./java-mall-app-shop-admin" // 项目根目录 + OUTPUT_DIR = "${UNI_APP_DIR}/dist/build/h5" // uniapp H5编译输出目录 + DEPLOY_TARGET = "/data/nginx/www/fafamall/demo" // 本地部署目录 } - + stages { stage('拉取代码') { steps { - checkout scm + checkout scm // 从代码仓库拉取最新代码 } } - - stage('彻底清理并安装完整依赖') { + + stage('安装依赖(含uniapp核心)') { steps { - sh """ - cd ${UNIAPP_DIR} || { - echo "错误:项目目录不存在!" - exit 1 + script { + dir("${UNI_APP_DIR}") { + echo "清理旧依赖..." + sh 'rm -rf node_modules package-lock.json' + sh 'npm cache clean --force' + + echo "设置国内镜像源加速..." + sh 'npm config set registry https://registry.npmmirror.com' + sh 'npm config set @dcloudio:registry https://registry.npmmirror.com' + + echo "安装uniapp必需依赖..." + sh 'npm install @vue/cli-service@5.0.8 --save-dev' + sh 'npm install @dcloudio/vue-cli-plugin-uni@latest --save-dev' + sh 'npm install' + + // 验证核心依赖 + def uniPluginExists = fileExists("${UNI_APP_DIR}/node_modules/@dcloudio/vue-cli-plugin-uni") + if (!uniPluginExists) { + error "uniapp核心依赖安装失败!缺少@dcloudio/vue-cli-plugin-uni" + } + } + } + } + } + + stage('编译Uniapp项目(H5平台)') { + steps { + script { + dir("${UNI_APP_DIR}") { + echo "开始编译Uniapp项目..." + sh 'npx vue-cli-service uni-build --mode production --platform h5' + + // 验证编译产物 + if (!fileExists("${OUTPUT_DIR}")) { + error "编译失败!未生成${OUTPUT_DIR}目录" + } + echo "Uniapp编译完成,输出路径:${OUTPUT_DIR}" + } + } + } + } + + stage('部署到本地目录') { + steps { + script { + echo "开始部署到本地目录:${DEPLOY_TARGET}" + + // 1. 确保目标目录存在并清空 + sh """ + mkdir -p ${DEPLOY_TARGET} + rm -rf ${DEPLOY_TARGET}/* + """ + + // 2. 复制构建产物到目标目录 + sh "cp -r ${OUTPUT_DIR}/* ${DEPLOY_TARGET}/" + + // 3. 验证部署结果 + def fileCount = sh( + script: "ls -la ${DEPLOY_TARGET} | wc -l", + returnStdout: true + ).trim() + + if (fileCount.toInteger() <= 2) { // 只包含.和..说明部署失败 + error "部署失败:目标目录${DEPLOY_TARGET}为空" } - # 彻底清理旧依赖和缓存 - rm -rf node_modules package-lock.json - npm cache clean --force # 清理npm缓存,解决依赖下载不完整问题 - - # 设置镜像源(确保国内访问稳定) - npm config set registry https://registry.npmmirror.com - # 额外配置@dcloudio私有源(关键:解决uni系列包下载问题) - npm config set @dcloudio:registry https://registry.npmmirror.com - - # 安装核心依赖(指定稳定版本,避免latest版本兼容性问题) - npm install @vue/cli-service@5.0.8 --save-dev - npm install @dcloudio/vue-cli-plugin-uni@3.0.0 --save-dev - - # 强制安装缺失的i18n模块 - npm install @dcloudio/uni-cli-i18n@latest --save-dev - - # 安装项目其他依赖 - npm install - - # 验证依赖是否安装完整 - echo "检查关键模块是否存在..." - if [ ! -d "node_modules/@dcloudio/uni-cli-i18n" ]; then - echo "错误:@dcloudio/uni-cli-i18n 仍未安装成功!" - exit 1 - fi - """ - } - } - - stage('UniApp打包构建') { - steps { - sh """ - cd ${UNIAPP_DIR} - - # 再次验证命令可用性 - npx vue-cli-service help | grep uni-build || { - echo "错误:uni-build命令仍不可用!" - exit 1 - } - - # 执行打包 - npx vue-cli-service uni-build \ - --mode production \ - --platform ${TARGET_PLATFORM} - - # 验证输出 - if [ ! -d "${OUTPUT_DIR}" ]; then - echo "打包失败,未生成输出目录!" - exit 1 - fi - """ - } - } - - stage('部署到服务器') { - steps { - sh """ - mkdir -p ${DEPLOY_PATH} - cp -r ${OUTPUT_DIR}/* ${DEPLOY_PATH}/ - echo "部署成功!" - """ + echo "部署完成!文件已输出到${DEPLOY_TARGET}" + } } } } - + post { - success { echo "打包部署成功" } - failure { echo "打包部署失败" } + success { + emailext( + to: "dev-team@example.com", + subject: "✅ Uniapp本地部署成功:${env.JOB_NAME} #${env.BUILD_NUMBER}", + body: """ + 项目部署成功! + - 项目名称:${env.JOB_NAME} + - 构建编号:${env.BUILD_NUMBER} + - 部署路径:${DEPLOY_TARGET} + - 构建日志:${env.BUILD_URL}console + """ + ) + } + failure { + emailext( + to: "dev-team@example.com", + subject: "❌ Uniapp本地部署失败:${env.JOB_NAME} #${env.BUILD_NUMBER}", + body: """ + 项目部署失败,请查看日志修复! + - 项目名称:${env.JOB_NAME} + - 构建编号:${env.BUILD_NUMBER} + - 错误日志:${env.BUILD_URL}console + """ + ) + } + always { + // 可选:清理工作空间 + cleanWs() + } } } + \ No newline at end of file