2026-05-05 16:06:32 +08:00
|
|
|
pipeline {
|
|
|
|
|
agent any
|
|
|
|
|
|
2026-05-08 18:47:02 +08:00
|
|
|
parameters {
|
2026-05-23 01:20:57 +08:00
|
|
|
// ── 版本升级策略 ─────────────────────────────────────────────────────
|
2026-05-23 01:25:10 +08:00
|
|
|
choice(name: 'VERSION_BUMP', choices: ['patch', 'minor', 'major'],
|
2026-05-23 01:20:57 +08:00
|
|
|
description: '版本升级策略: major(1.0.0→2.0.0), minor(1.0.0→1.1.0), patch(1.0.0→1.0.1)')
|
|
|
|
|
|
2026-05-23 01:28:41 +08:00
|
|
|
// 要构建并发布的模块(勾选即发布)
|
2026-05-23 01:36:40 +08:00
|
|
|
booleanParam(name: 'MOD_CORE', defaultValue: false, description: '发布 sdk-core')
|
|
|
|
|
booleanParam(name: 'MOD_IM', defaultValue: false, description: '发布 sdk-im')
|
|
|
|
|
booleanParam(name: 'MOD_PUSH', defaultValue: false, description: '发布 sdk-push')
|
|
|
|
|
booleanParam(name: 'MOD_UPDATE', defaultValue: false, description: '发布 sdk-update')
|
|
|
|
|
booleanParam(name: 'MOD_WEBVIEW', defaultValue: false, description: '发布 sdk-webview')
|
|
|
|
|
booleanParam(name: 'MOD_LICENSE', defaultValue: false, description: '发布 sdk-license')
|
2026-05-08 18:47:02 +08:00
|
|
|
}
|
|
|
|
|
|
2026-05-05 16:06:32 +08:00
|
|
|
environment {
|
2026-05-23 01:30:53 +08:00
|
|
|
NEXUS_CREDS = credentials('NEXUS_CREDS')
|
2026-05-05 16:06:32 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
stages {
|
2026-05-08 18:47:02 +08:00
|
|
|
stage('Checkout') {
|
|
|
|
|
steps {
|
2026-05-16 12:48:17 +08:00
|
|
|
checkout([
|
2026-05-23 01:20:57 +08:00
|
|
|
$class: 'GitSCM',
|
|
|
|
|
branches: [[name: 'main']],
|
|
|
|
|
extensions: [[$class: 'CleanBeforeCheckout']],
|
|
|
|
|
userRemoteConfigs: scm.userRemoteConfigs
|
2026-05-16 12:48:17 +08:00
|
|
|
])
|
2026-05-08 18:47:02 +08:00
|
|
|
script {
|
2026-05-23 01:28:41 +08:00
|
|
|
def moduleChecks = [
|
|
|
|
|
'sdk-core': params.MOD_CORE,
|
|
|
|
|
'sdk-im': params.MOD_IM,
|
|
|
|
|
'sdk-push': params.MOD_PUSH,
|
|
|
|
|
'sdk-update': params.MOD_UPDATE,
|
|
|
|
|
'sdk-webview': params.MOD_WEBVIEW,
|
|
|
|
|
'sdk-license': params.MOD_LICENSE,
|
|
|
|
|
]
|
|
|
|
|
def resolved = moduleChecks.findAll { k, v -> v }.collect { k, v -> k }
|
2026-05-23 01:20:57 +08:00
|
|
|
if (resolved.isEmpty()) {
|
2026-05-23 01:28:41 +08:00
|
|
|
error("没有选择任何模块,请至少勾选一个")
|
2026-05-23 01:20:57 +08:00
|
|
|
}
|
|
|
|
|
env.PUBLISH_MODULES = resolved.join(',')
|
2026-05-23 01:34:53 +08:00
|
|
|
echo "Modules: ${env.PUBLISH_MODULES}"
|
2026-05-23 01:20:57 +08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
stage('Resolve Versions') {
|
|
|
|
|
steps {
|
|
|
|
|
script {
|
2026-05-23 02:01:39 +08:00
|
|
|
// Read version using cmd.exe findstr
|
|
|
|
|
def verRaw = bat(
|
|
|
|
|
script: '@findstr /B "PUBLISH_VERSION=" gradle.properties',
|
2026-05-23 02:01:14 +08:00
|
|
|
returnStdout: true
|
|
|
|
|
).trim()
|
2026-05-23 02:01:39 +08:00
|
|
|
echo "DEBUG: verRaw=[${verRaw}]"
|
|
|
|
|
def currentVer = verRaw.contains('=') ? verRaw.split('=', 2)[1].trim() : '0.1.0'
|
2026-05-23 01:34:53 +08:00
|
|
|
echo "Current PUBLISH_VERSION: ${currentVer}"
|
|
|
|
|
|
|
|
|
|
def parts = currentVer.tokenize('.')
|
|
|
|
|
while (parts.size() < 3) { parts.add('0') }
|
2026-05-23 02:01:14 +08:00
|
|
|
def major = parts[0].toInteger()
|
|
|
|
|
def minor = parts[1].toInteger()
|
|
|
|
|
def patch = parts[2].toInteger()
|
|
|
|
|
|
2026-05-23 02:01:26 +08:00
|
|
|
echo "DEBUG: VERSION_BUMP=[${params.VERSION_BUMP}]"
|
|
|
|
|
echo "DEBUG: before bump major=${major} minor=${minor} patch=${patch}"
|
|
|
|
|
|
|
|
|
|
if (params.VERSION_BUMP == 'major') { major++; minor = 0; patch = 0 }
|
|
|
|
|
else if (params.VERSION_BUMP == 'minor') { minor++; patch = 0 }
|
|
|
|
|
else { patch++ }
|
|
|
|
|
|
|
|
|
|
echo "DEBUG: after bump major=${major} minor=${minor} patch=${patch}"
|
2026-05-23 02:01:14 +08:00
|
|
|
def newVer = "${major}.${minor}.${patch}"
|
2026-05-23 01:34:53 +08:00
|
|
|
echo "Auto-bumped PUBLISH_VERSION: ${currentVer} → ${newVer}"
|
2026-05-23 01:51:00 +08:00
|
|
|
env.NEW_VERSION = newVer
|
2026-05-23 01:20:57 +08:00
|
|
|
|
2026-05-23 02:01:14 +08:00
|
|
|
// Write back using powershell
|
|
|
|
|
bat "powershell -Command \"(Get-Content gradle.properties) -replace '^PUBLISH_VERSION=.*', 'PUBLISH_VERSION=${newVer}' | Set-Content -NoNewline gradle.properties\""
|
2026-05-23 01:20:57 +08:00
|
|
|
|
2026-05-23 01:34:53 +08:00
|
|
|
def modules = env.PUBLISH_MODULES.split(',').toList()
|
|
|
|
|
def versionMap = [:]
|
|
|
|
|
for (mod in modules) {
|
|
|
|
|
def propName = "SDK_${mod.replace('sdk-', '').toUpperCase()}_VERSION"
|
|
|
|
|
versionMap[propName] = newVer
|
2026-05-08 18:47:02 +08:00
|
|
|
}
|
2026-05-23 01:34:53 +08:00
|
|
|
env.VERSION_ARGS = versionMap
|
|
|
|
|
.collect { k, v -> "-P${k}=${v}" }
|
|
|
|
|
.join(' ')
|
|
|
|
|
echo "VERSION_ARGS: ${env.VERSION_ARGS}"
|
2026-05-08 18:47:02 +08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2026-05-23 01:42:32 +08:00
|
|
|
stage('Build AARs') {
|
2026-05-05 16:06:32 +08:00
|
|
|
steps {
|
2026-05-23 01:20:57 +08:00
|
|
|
script {
|
|
|
|
|
def modules = env.PUBLISH_MODULES.split(',').toList()
|
|
|
|
|
def moduleTasks = modules.collect { ":${it}:assembleRelease" }.join(' ')
|
2026-05-23 01:42:32 +08:00
|
|
|
bat "gradlew.bat ${moduleTasks} ${env.VERSION_ARGS} --no-daemon"
|
2026-05-05 16:06:32 +08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
stage('Publish to Nexus') {
|
|
|
|
|
steps {
|
2026-05-08 18:47:02 +08:00
|
|
|
script {
|
2026-05-23 01:20:57 +08:00
|
|
|
def modules = env.PUBLISH_MODULES.split(',').toList()
|
|
|
|
|
def publishTasks = modules.collect { ":${it}:publish" }.join(' ')
|
2026-05-23 01:30:53 +08:00
|
|
|
def credArgs = "-PNEXUS_USER=%NEXUS_CREDS_USR% -PNEXUS_PASSWORD=%NEXUS_CREDS_PSW%"
|
2026-05-23 01:20:57 +08:00
|
|
|
bat "gradlew.bat ${publishTasks} ${env.VERSION_ARGS} ${credArgs} --no-daemon"
|
2026-05-08 18:47:02 +08:00
|
|
|
}
|
2026-05-05 16:06:32 +08:00
|
|
|
}
|
|
|
|
|
}
|
2026-05-23 01:51:00 +08:00
|
|
|
|
|
|
|
|
stage('Commit Version Bump') {
|
|
|
|
|
steps {
|
2026-05-23 01:54:28 +08:00
|
|
|
script {
|
|
|
|
|
bat """
|
|
|
|
|
git config user.email "jenkins@xuqm.com"
|
|
|
|
|
git config user.name "Jenkins CI"
|
|
|
|
|
git add gradle.properties
|
|
|
|
|
git diff --cached --quiet || git commit -m "ci: bump PUBLISH_VERSION to ${env.NEW_VERSION}"
|
2026-05-23 02:04:01 +08:00
|
|
|
git push origin HEAD:main
|
2026-05-23 01:54:28 +08:00
|
|
|
"""
|
2026-05-23 01:51:00 +08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2026-05-05 16:06:32 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
post {
|
2026-05-23 01:20:57 +08:00
|
|
|
success { echo "Android SDK 构建成功" }
|
2026-05-23 01:42:32 +08:00
|
|
|
failure { echo "Android SDK 构建失败" }
|
2026-05-05 16:06:32 +08:00
|
|
|
}
|
|
|
|
|
}
|