From d4235dcbd0fb807f28b73d583822a45d3059fbe6 Mon Sep 17 00:00:00 2001 From: Home Date: Sun, 29 Mar 2026 02:44:30 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4jenkins=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E5=8C=96=E6=B5=81=E6=B0=B4=E7=BA=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Jenkinsfile | 24 +++++++---------- Jenkinsfile.ios | 72 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 82 insertions(+), 14 deletions(-) create mode 100644 Jenkinsfile.ios diff --git a/Jenkinsfile b/Jenkinsfile index c622d1c6..22c0b578 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -1,15 +1,14 @@ pipeline { - agent any + agent {label 'master'} tools { nodejs 'node22' gradle 'gradle811' } environment { UNIAPP_APP_ID = '__UNI__EDE0E52' - ANDROID_ASSETS_DIR = "Android/simpleDemo/src/main/assets/apps/${UNIAPP_APP_ID}/www" - // Android 构建环境 + ANDROID_APP_DIR = "Android/simpleDemo" + ANDROID_ASSETS_DIR = "${ANDROID_APP_DIR}/src/main/assets/apps/${UNIAPP_APP_ID}/www" ANDROID_SDK = '/opt/android-sdk' // 安卓 SDK 路径 - GRADLE_OPTS = '-Dorg.gradle.daemon=false -Dorg.gradle.parallel=true' } stages { stage('打印环境变量') { @@ -57,19 +56,11 @@ pipeline { steps { // 1. 生成 local.properties 指定 SDK 路径 sh "echo 'sdk.dir=${ANDROID_SDK}' > Android/local.properties" - // 3. 直接执行编译(核心:Android/gradlew) --offline sh "gradle assembleRelease -g ${WORKSPACE}/gradle-home -p Android" } } -// stage('查看APK & 归档') { -// steps { -// sh "ls -lh Android/app/build/outputs/apk/release/" -// archiveArtifacts artifacts: 'Android/app/build/outputs/apk/release/*.apk', fingerprint: true -// } -// } - } post { @@ -77,10 +68,15 @@ pipeline { echo '流水线已结束' } success { - echo '🎉 项目部署成功!' + echo "✅ 构建成功,归档 APK" + archiveArtifacts( + artifacts: '${ANDROID_APP_DIR}/build/outputs/apk/release/*.apk', + fingerprint: true, + onlyIfSuccessful: true + ) } failure { - echo '⚠️ 部署失败,请检查日志!' + echo '⚠️ 构建失败,请检查日志!' } } } \ No newline at end of file diff --git a/Jenkinsfile.ios b/Jenkinsfile.ios new file mode 100644 index 00000000..e6957b05 --- /dev/null +++ b/Jenkinsfile.ios @@ -0,0 +1,72 @@ +pipeline { + agent {label 'macos'} + tools { + nodejs 'node22' + } + environment { + UNIAPP_APP_ID = '__UNI__EDE0E52' + IOS_ASSETS_DIR = "Android/simpleDemo/src/main/assets/apps/${UNIAPP_APP_ID}/www" +// ANDROID_SDK = '/opt/android-sdk' // 安卓 SDK 路径 + } + stages { + stage('打印环境变量') { + steps { + echo "使用的 UNIAPP_APP_ID:${env.UNIAPP_APP_ID}" + echo "安卓资源目录:${env.IOS_ASSETS_DIR}" + sh "node -v" // 打印 NodeJS 版本 + sh "npm -v" // 打印 NPM + } + } + stage('清理旧构建') { + steps { + sh "rm -rf dist/" // 清理 UniApp 打包生成的 dist 目录 + sh "rm -rf android/simpleDemo/build/" // 清理 Android 项目构建缓存 + sh "rm -rf ${ANDROID_ASSETS_DIR}" // 清理旧的 APP 资源文件目录 + } + } + stage('安装依赖') { + steps { + echo "✅ 从清华源安装缺失的 uts 二进制包" + sh "npm install @dcloudio/uts-linux-x64-gnu --force --registry=https://registry.npmmirror.com" + echo "✅ 安装 UniApp 依赖(忽略平台+开权限+强制)" + sh "npm install --force --unsafe-perm --ignore-platform" + } + } + stage('打包uniapp') { + steps { + sh "npm run build:app-plus:${env.BRANCH_NAME}" + } + } + stage('复制UniApp资源到安卓assets目录') { + steps { + echo "开始复制 dist 资源到 ${ANDROID_ASSETS_DIR}" + // 先创建目标目录(防止目录不存在报错) + sh "mkdir -p ${ANDROID_ASSETS_DIR}" + // 把 dist 里所有文件 复制 到安卓资源目录(推荐) + sh "cp -rf dist/build/app/* ${ANDROID_ASSETS_DIR}/" + echo "✅ 资源复制完成" + } + } + // ====================== 构建 APK ====================== + stage('配置SDK & 赋予权限 & 编译Android') { + steps { + // 1. 生成 local.properties 指定 SDK 路径 + sh "echo 'sdk.dir=${ANDROID_SDK}' > Android/local.properties" + // 3. 直接执行编译(核心:Android/gradlew) --offline + sh "gradle assembleRelease -g ${WORKSPACE}/gradle-home -p Android" + } + } + } + + post { + always { + echo '流水线已结束' + } + success { + echo '🎉 项目部署成功!' + } + failure { + echo '⚠️ 部署失败,请检查日志!' + } + } +} \ No newline at end of file