fix publish backup flow

This commit is contained in:
kdletters
2026-05-28 02:05:41 +08:00
parent 23f6317c8b
commit de8b82c575
5 changed files with 193 additions and 28 deletions

View File

@@ -27,7 +27,7 @@ pipeline {
string(name: 'SPACETIME_ROOT_DIR', defaultValue: '/stdb', description: 'spacetime CLI root-dir需与自托管 spacetimedb.service 一致')
string(name: 'SPACETIME_RUN_AS_USER', defaultValue: 'spacetimedb', description: '执行 spacetime publish 的本机用户,默认使用自托管服务用户')
booleanParam(name: 'CLEAR_DATABASE', defaultValue: false, description: '是否清空数据库后发布')
choice(name: 'DATABASE_BACKUP_MODE', choices: ['async', 'sync', 'skip'], description: '数据库备份策略async 在 publish 成功后触发服务器 systemd 备份并继续sync 在 publish 前等待备份完成且失败阻断skip 跳过')
choice(name: 'DATABASE_BACKUP_MODE', choices: ['async', 'sync', 'skip'], description: '数据库备份策略async 在 publish 前生成本地冷备份、后台上传 OSSsync 在 publish 前等待上传完成且失败阻断skip 跳过')
}
stages {
@@ -143,7 +143,18 @@ pipeline {
if (!(backupMode in ['async', 'sync', 'skip'])) {
error("DATABASE_BACKUP_MODE 只能是 async、sync 或 skip: ${backupMode}")
}
def backupArg = "--backup-mode \"${backupMode}\""
def publishScriptPath = 'scripts/deploy/production-stdb-publish.sh'
def publishScriptText = readFile(file: publishScriptPath, encoding: 'UTF-8')
def publishScriptSupportsBackupMode = publishScriptText.contains('--backup-mode')
def backupArg = ''
if (publishScriptSupportsBackupMode) {
backupArg = "--backup-mode \"${backupMode}\""
} else if (backupMode == 'sync') {
error('当前工作区的 scripts/deploy/production-stdb-publish.sh 还不支持 --backup-mode无法保证 sync 语义。请先更新工作区脚本后再运行。')
} else {
echo "[Jenkins] 当前工作区脚本还不支持 --backup-modeasync/skip 自动降级为 --skip-backup避免参数不兼容导致发布失败。"
backupArg = '--skip-backup'
}
def rootArg = "--root-dir \"${params.SPACETIME_ROOT_DIR?.trim() ? params.SPACETIME_ROOT_DIR.trim() : '/stdb'}\""
def runAsArg = params.SPACETIME_RUN_AS_USER?.trim()
? "--run-as-user \"${params.SPACETIME_RUN_AS_USER.trim()}\""