From b928d0eb2f46a7b7f7c794b481225eb734158bf7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=94=B0=E5=B2=A9?= Date: Mon, 30 Mar 2026 16:28:29 +0800 Subject: [PATCH] =?UTF-8?q?JLBA202505130001=5F=E5=85=B3=E4=BA=8E=E5=90=89?= =?UTF-8?q?=E6=9E=97=E9=93=B6=E8=A1=8C=E6=96=B0=E5=BB=BAAI=E6=99=BA?= =?UTF-8?q?=E8=83=BD=E5=9F=B9=E8=AE=AD=E7=B3=BB=E7=BB=9F=E7=9A=84=E9=9C=80?= =?UTF-8?q?=E6=B1=82=5F=E5=AE=8C=E5=96=84=E4=BB=A3=E7=A0=81=E8=A7=84?= =?UTF-8?q?=E8=8C=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Jenkinsfile-ios | 159 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 157 insertions(+), 2 deletions(-) diff --git a/Jenkinsfile-ios b/Jenkinsfile-ios index a05e44a7..f11ec853 100644 --- a/Jenkinsfile-ios +++ b/Jenkinsfile-ios @@ -82,12 +82,167 @@ pipeline { echo "✅ 版本号:${env.versionCode}" } } - + //stage('安装证书 & 描述文件') { + // steps { + // echo "# =============== 安装 p12 证书 ===============" + // sh ''' + // 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 set-key-partition-list -S apple-tool:,apple:,codesign: -s -k ${MAC_LOGIN_PWD} ~/Library/Keychains/login.keychain-db >/dev/null 2>&1 + // ''' + // echo "# =============== 安装描述文件 ===============" + // sh ''' + // mkdir -p "$HOME/Library/MobileDevice/Provisioning Profiles" + // cp "${PROFILE_FILE}" "$HOME/Library/MobileDevice/Provisioning Profiles/" + // ''' + // } + //} + //stage('打包uniapp') { + // steps { + // sh "npm run build:app-plus:${env.BRANCH_NAME}" + // } + //} + //stage('复制UniApp资源到目录') { + // steps { + // echo "开始复制 dist 资源到 ${ASSETS_DIR}" + // // 先创建目标目录(防止目录不存在报错) + // sh "mkdir -p ${ASSETS_DIR}" + // // 把 dist 里所有文件 复制 到安卓资源目录(推荐) + // sh "cp -rf dist/build/app/* ${ASSETS_DIR}/" + // echo "✅ 资源复制完成" + // } + //} + // + //stage('️清理旧构建内容') { + // steps { + // sh """ + // xcodebuild clean \\ + // -project ${APP_DIR}/${PROJECT_NAME}.xcodeproj \\ + // -scheme ${SCHEME_NAME} \\ + // -configuration ${CONFIGURATION} + // """ + // + // } + //} + //stage('创建SDK软链接') { + // steps { + // sh ''' + // # 删除旧的软链接/目录 + // rm -rf "${TARGET_LINK}" + // + // # 创建软链接(不进入任何目录) + // ln -s "${SOURCE_SDK}" "${TARGET_LINK}" + // + // # 验证链接是否生效 + // ls -la "${TARGET_LINK}" + // ''' + // } + //} + //stage('✅ 开始归档(静默模式)') { + // steps { + // script { + // // Groovy 里拼接命令,随便写注释,不会影响 shell + // def xcodeCommand = [ + // 'xcodebuild archive', + // // 项目路径 + // "-project ${APP_DIR}/${PROJECT_NAME}.xcodeproj", + // // Scheme 配置 + // "-scheme ${SCHEME_NAME}", + // // 编译模式 Release/Debug + // "-configuration ${CONFIGURATION}", + // // 归档输出路径 + // "-archivePath ${ARCHIVE_PATH}", + // // 平台通用 iOS + // "-destination generic/platform=iOS", + // // 版本号 + // "MARKETING_VERSION=${versionName}", + // "CURRENT_PROJECT_VERSION=${versionCode}", + // + // // 手动签名 + // "CODE_SIGN_STYLE=Manual", + // "CODE_SIGN_IDENTITY='${CERTIFICATE_NAME}'", + // "PROVISIONING_PROFILE_SPECIFIER='${PROVISIONING_PROFILE_UUID}'", + // "PROVISIONING_PROFILE='${PROVISIONING_PROFILE_UUID}'", + // "DEVELOPMENT_TEAM='${DEVELOPMENT_TEAM}'", + // + // // 钥匙串 + // "OTHER_CODE_SIGN_FLAGS='--keychain ~/Library/Keychains/login.keychain-db'", + // + // // 编译所有架构 + // "ONLY_ACTIVE_ARCH=NO", + // + // // 清空编译参数 + // "OTHER_CFLAGS=''", + // "OTHER_CPLUSPLUS_FLAGS=''", + // "OTHER_SWIFT_FLAGS=''", + // "> /dev/null 2>&1" + // ].join(' ') // 拼接成一行完整命令 + // // 打印最终命令 + // echo "执行命令:${xcodeCommand}" + // // 执行! + // sh(xcodeCommand) + // } + // } + //} + //stage('✅ 开始导出 IPA安装包') { + // steps { + // sh ''' + // xcodebuild -exportArchive \\ + // -archivePath ${ARCHIVE_PATH} \\ + // -exportPath ${APP_DIR}/build \\ + // -exportOptionsPlist ${EXPORT_OPTIONS_PLIST} \\ + // -allowProvisioningUpdates + // ''' + // } + //} + //stage('🚀 验证并上传 TestFlight') { + // steps { + // echo "✅ 开始验证 IPA 有效性" + // sh ''' + // mkdir -p $HOME/private_keys + // cp -f "${P8_FILE}" $HOME/private_keys/ + // ''' + // // 1. 先验证 IPA(必须这一步,提前拦截错误) + // sh """ + // xcrun altool --validate-app \\ + // --file ${APP_DIR}/build/${SCHEME_NAME}.ipa \\ + // --type ${API_TYPE} \\ + // --apiKey ${API_KEY} \\ + // --apiIssuer ${API_ISSUER} + // """ + // + // echo "✅ IPA 验证成功!开始上传到 TestFlight" + // + // echo "🎉 全部完成!请到 App Store Connect TestFlight 查看构建" + // } + //} stage('🔐 生成 JWT') { steps { script { + //JWT_TOKEN = sh( + // script: "node ${CERT_DIR}/generate-jwt.js", + // returnStdout: true + //).trim() JWT_TOKEN = sh( - script: "node ${CERT_DIR}/generate-jwt.js", + script: ''' + node -e " + const jwt = require('jsonwebtoken'); + const privateKey = `''' + p8 + '''`; + const token = jwt.sign( + { + iss: '""' + API_ISSUER + '""', + exp: Math.floor(Date.now() / 1000) + 1200, + aud: 'appstoreconnect-v1' + }, + privateKey, + { + algorithm: 'ES256', + header: { kid: '""' + API_KEY + '""' } + } + ); + console.log(token); + " + ''', returnStdout: true ).trim() }