Files
tra-app/Jenkinsfile
T
2026-03-29 02:55:45 +08:00

108 lines
4.3 KiB
Groovy
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
pipeline {
agent {label 'linux'}
tools {
nodejs 'node22'
gradle 'gradle811'
}
environment {
UNIAPP_APP_ID = '__UNI__EDE0E52'
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 路径
}
stages {
stage('读取 manifest 版本号 (Node原生解析·零依赖)') {
steps {
script {
// ✅ 用 Node 读取,100% 稳定,不用装任何工具!
VERSION_NAME = sh(
script: "node -p \"require('./src/manifest.json').versionName\"",
returnStdout: true
).trim()
VERSION_CODE = sh(
script: "node -p \"require('./src/manifest.json').versionCode\"",
returnStdout: true
).trim()
echo "====================================="
echo " 版本名称:${VERSION_NAME}"
echo " 版本号:${VERSION_CODE}"
echo "====================================="
// // 自动替换到 Android build.gradle
// def buildFile = "Android/simpleDemo/build.gradle"
// sh "sed -i \"s/versionName \\".*\\"/versionName \\"${VERSION_NAME}\\"/\" ${buildFile}"
// sh "sed -i \"s/versionCode [0-9]*/versionCode ${VERSION_CODE}/\" ${buildFile}"
}
}
}
stage('打印环境变量') {
steps {
echo "使用的 UNIAPP_APP_ID${env.UNIAPP_APP_ID}"
echo "安卓资源目录:${env.ANDROID_ASSETS_DIR}"
sh "node -v" // 打印 NodeJS 版本
sh "npm -v" // 打印 NPM
sh "java -version"
sh "gradle -v" // 直接用全局 gradle 命令!
}
}
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 "✅ 构建成功,归档 APK"
archiveArtifacts(
artifacts: '${ANDROID_APP_DIR}/build/outputs/apk/release/*.apk',
fingerprint: true,
onlyIfSuccessful: true
)
}
failure {
echo '⚠️ 构建失败,请检查日志!'
}
}
}