JLBA202505130001_关于吉林银行新建AI智能培训系统的需求_完善代码规范

This commit is contained in:
田岩
2026-03-30 16:44:40 +08:00
parent 4fa0e021fa
commit dc3304efe6
2 changed files with 238 additions and 262 deletions
+142 -136
View File
@@ -1,5 +1,7 @@
pipeline { pipeline {
agent {label 'macos'} agent {
label 'macos'
}
tools { tools {
nodejs 'node22' nodejs 'node22'
} }
@@ -82,140 +84,140 @@ pipeline {
echo "✅ 版本号:${env.versionCode}" echo "✅ 版本号:${env.versionCode}"
} }
} }
//stage('安装证书 & 描述文件') { stage('安装证书 & 描述文件') {
// steps { steps {
// echo "# =============== 安装 p12 证书 ===============" echo "# =============== 安装 p12 证书 ==============="
// sh ''' sh '''
// security unlock-keychain -p ${MAC_LOGIN_PWD} ~/Library/Keychains/login.keychain-db >/dev/null 2>&1 security unlock-keychain -p ${MAC_LOGIN_PWD} ~/Library/Keychains/login.keychain-db >/dev/null 2>&1
// security import ${P12_FILE} -k ~/Library/Keychains/login.keychain-db -P ${P12_PASSWORD} -A >/dev/null 2>&1 security import ${P12_FILE} -k ~/Library/Keychains/login.keychain-db -P ${P12_PASSWORD} -A >/dev/null 2>&1
// security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k ${MAC_LOGIN_PWD} ~/Library/Keychains/login.keychain-db >/dev/null 2>&1 security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k ${MAC_LOGIN_PWD} ~/Library/Keychains/login.keychain-db >/dev/null 2>&1
// ''' '''
// echo "# =============== 安装描述文件 ===============" echo "# =============== 安装描述文件 ==============="
// sh ''' sh '''
// mkdir -p "$HOME/Library/MobileDevice/Provisioning Profiles" mkdir -p "$HOME/Library/MobileDevice/Provisioning Profiles"
// cp "${PROFILE_FILE}" "$HOME/Library/MobileDevice/Provisioning Profiles/" cp "${PROFILE_FILE}" "$HOME/Library/MobileDevice/Provisioning Profiles/"
// ''' '''
// } }
//} }
//stage('打包uniapp') { stage('打包uniapp') {
// steps { steps {
// sh "npm run build:app-plus:${env.BRANCH_NAME}" sh "npm run build:app-plus:${env.BRANCH_NAME}"
// } }
//} }
//stage('复制UniApp资源到目录') { stage('复制UniApp资源到目录') {
// steps { steps {
// echo "开始复制 dist 资源到 ${ASSETS_DIR}" echo "开始复制 dist 资源到 ${ASSETS_DIR}"
// // 先创建目标目录(防止目录不存在报错) // 先创建目标目录(防止目录不存在报错)
// sh "mkdir -p ${ASSETS_DIR}" sh "mkdir -p ${ASSETS_DIR}"
// // 把 dist 里所有文件 复制 到安卓资源目录(推荐) // 把 dist 里所有文件 复制 到安卓资源目录(推荐)
// sh "cp -rf dist/build/app/* ${ASSETS_DIR}/" sh "cp -rf dist/build/app/* ${ASSETS_DIR}/"
// echo "✅ 资源复制完成" echo "✅ 资源复制完成"
// } }
//} }
//
//stage('️清理旧构建内容') { stage('️清理旧构建内容') {
// steps { steps {
// sh """ sh """
// xcodebuild clean \\ xcodebuild clean \\
// -project ${APP_DIR}/${PROJECT_NAME}.xcodeproj \\ -project ${APP_DIR}/${PROJECT_NAME}.xcodeproj \\
// -scheme ${SCHEME_NAME} \\ -scheme ${SCHEME_NAME} \\
// -configuration ${CONFIGURATION} -configuration ${CONFIGURATION}
// """ """
//
// } }
//} }
//stage('创建SDK软链接') { stage('创建SDK软链接') {
// steps { steps {
// sh ''' sh '''
// # 删除旧的软链接/目录 # 删除旧的软链接/目录
// rm -rf "${TARGET_LINK}" rm -rf "${TARGET_LINK}"
//
// # 创建软链接(不进入任何目录) # 创建软链接(不进入任何目录)
// ln -s "${SOURCE_SDK}" "${TARGET_LINK}" ln -s "${SOURCE_SDK}" "${TARGET_LINK}"
//
// # 验证链接是否生效 # 验证链接是否生效
// ls -la "${TARGET_LINK}" ls -la "${TARGET_LINK}"
// ''' '''
// } }
//} }
//stage('✅ 开始归档(静默模式)') { stage('✅ 开始归档(静默模式)') {
// steps { steps {
// script { script {
// // Groovy 里拼接命令,随便写注释,不会影响 shell // Groovy 里拼接命令,随便写注释,不会影响 shell
// def xcodeCommand = [ def xcodeCommand = [
// 'xcodebuild archive', 'xcodebuild archive',
// // 项目路径 // 项目路径
// "-project ${APP_DIR}/${PROJECT_NAME}.xcodeproj", "-project ${APP_DIR}/${PROJECT_NAME}.xcodeproj",
// // Scheme 配置 // Scheme 配置
// "-scheme ${SCHEME_NAME}", "-scheme ${SCHEME_NAME}",
// // 编译模式 Release/Debug // 编译模式 Release/Debug
// "-configuration ${CONFIGURATION}", "-configuration ${CONFIGURATION}",
// // 归档输出路径 // 归档输出路径
// "-archivePath ${ARCHIVE_PATH}", "-archivePath ${ARCHIVE_PATH}",
// // 平台通用 iOS // 平台通用 iOS
// "-destination generic/platform=iOS", "-destination generic/platform=iOS",
// // 版本号 // 版本号
// "MARKETING_VERSION=${versionName}", "MARKETING_VERSION=${versionName}",
// "CURRENT_PROJECT_VERSION=${versionCode}", "CURRENT_PROJECT_VERSION=${versionCode}",
//
// // 手动签名 // 手动签名
// "CODE_SIGN_STYLE=Manual", "CODE_SIGN_STYLE=Manual",
// "CODE_SIGN_IDENTITY='${CERTIFICATE_NAME}'", "CODE_SIGN_IDENTITY='${CERTIFICATE_NAME}'",
// "PROVISIONING_PROFILE_SPECIFIER='${PROVISIONING_PROFILE_UUID}'", "PROVISIONING_PROFILE_SPECIFIER='${PROVISIONING_PROFILE_UUID}'",
// "PROVISIONING_PROFILE='${PROVISIONING_PROFILE_UUID}'", "PROVISIONING_PROFILE='${PROVISIONING_PROFILE_UUID}'",
// "DEVELOPMENT_TEAM='${DEVELOPMENT_TEAM}'", "DEVELOPMENT_TEAM='${DEVELOPMENT_TEAM}'",
//
// // 钥匙串 // 钥匙串
// "OTHER_CODE_SIGN_FLAGS='--keychain ~/Library/Keychains/login.keychain-db'", "OTHER_CODE_SIGN_FLAGS='--keychain ~/Library/Keychains/login.keychain-db'",
//
// // 编译所有架构 // 编译所有架构
// "ONLY_ACTIVE_ARCH=NO", "ONLY_ACTIVE_ARCH=NO",
//
// // 清空编译参数 // 清空编译参数
// "OTHER_CFLAGS=''", "OTHER_CFLAGS=''",
// "OTHER_CPLUSPLUS_FLAGS=''", "OTHER_CPLUSPLUS_FLAGS=''",
// "OTHER_SWIFT_FLAGS=''", "OTHER_SWIFT_FLAGS=''",
// "> /dev/null 2>&1" "> /dev/null 2>&1"
// ].join(' ') // 拼接成一行完整命令 ].join(' ') // 拼接成一行完整命令
// // 打印最终命令 // 打印最终命令
// echo "执行命令:${xcodeCommand}" echo "执行命令:${xcodeCommand}"
// // 执行! // 执行!
// sh(xcodeCommand) sh(xcodeCommand)
// } }
// } }
//} }
//stage('✅ 开始导出 IPA安装包') { stage('✅ 开始导出 IPA安装包') {
// steps { steps {
// sh ''' sh '''
// xcodebuild -exportArchive \\ xcodebuild -exportArchive \\
// -archivePath ${ARCHIVE_PATH} \\ -archivePath ${ARCHIVE_PATH} \\
// -exportPath ${APP_DIR}/build \\ -exportPath ${APP_DIR}/build \\
// -exportOptionsPlist ${EXPORT_OPTIONS_PLIST} \\ -exportOptionsPlist ${EXPORT_OPTIONS_PLIST} \\
// -allowProvisioningUpdates -allowProvisioningUpdates
// ''' '''
// } }
//} }
//stage('🚀 验证并上传 TestFlight') { stage('🚀 验证并上传 TestFlight') {
// steps { steps {
// echo "✅ 开始验证 IPA 有效性" echo "✅ 开始验证 IPA 有效性"
// sh ''' sh '''
// mkdir -p $HOME/private_keys mkdir -p $HOME/private_keys
// cp -f "${P8_FILE}" $HOME/private_keys/ cp -f "${P8_FILE}" $HOME/private_keys/
// ''' '''
// // 1. 先验证 IPA(必须这一步,提前拦截错误) // 1. 先验证 IPA(必须这一步,提前拦截错误)
// sh """ sh """
// xcrun altool --validate-app \\ xcrun altool --validate-app \\
// --file ${APP_DIR}/build/${SCHEME_NAME}.ipa \\ --file ${APP_DIR}/build/${SCHEME_NAME}.ipa \\
// --type ${API_TYPE} \\ --type ${API_TYPE} \\
// --apiKey ${API_KEY} \\ --apiKey ${API_KEY} \\
// --apiIssuer ${API_ISSUER} --apiIssuer ${API_ISSUER}
// """ """
//
// echo "✅ IPA 验证成功!开始上传到 TestFlight" echo "✅ IPA 验证成功!开始上传到 TestFlight"
//
// echo "🎉 全部完成!请到 App Store Connect TestFlight 查看构建" echo "🎉 全部完成!请到 App Store Connect TestFlight 查看构建"
// } }
//} }
stage('🔐 生成 JWT') { stage('🔐 生成 JWT') {
steps { steps {
script { script {
@@ -226,11 +228,15 @@ node -e "const fs=require('fs');const jwt=require('jsonwebtoken');const privateK
''', ''',
returnStdout: true returnStdout: true
).trim() ).trim()
echo "✅ JWT 生成成功:${JWT_TOKEN}" echo "✅ JWT 生成成功:${JWT_TOKEN}"
} }
} }
} }
stage('🚀 发布到 TestFlight 测试组') {
steps {
echo "todo"
}
}
} }
-30
View File
@@ -1,30 +0,0 @@
const fs = require('fs');
const jwt = require('jsonwebtoken');
// 从 Jenkins 环境变量获取
const API_KEY = process.env.API_KEY;
const API_ISSUER = process.env.API_ISSUER;
const P8_FILE = process.env.P8_FILE;
// 读取 p8 私钥
const privateKey = fs.readFileSync(P8_FILE, 'utf8');
// 生成 JWT(苹果标准格式)
const token = jwt.sign(
{
iss: API_ISSUER,
exp: Math.floor(Date.now() / 1000) + 1200, // 20分钟
aud: 'appstoreconnect-v1'
},
privateKey,
{
algorithm: 'ES256',
header: {
kid: API_KEY,
alg: 'ES256'
}
}
);
// 输出 JWTJenkins 会捕获这个值)
console.log(token);