Add admin upgrade package preflight
This commit is contained in:
@@ -15,6 +15,7 @@ const stateRoot = path.resolve(
|
||||
|
||||
const jobId = requireArg(args, 'job-id');
|
||||
const mode = requireArg(args, 'mode');
|
||||
const dryRun = args['dry-run'] === 'true';
|
||||
const packagePath = path.resolve(requireArg(args, 'package'));
|
||||
const packageName = args['package-name'] || path.basename(packagePath);
|
||||
const jobDir = path.join(stateRoot, 'jobs', jobId);
|
||||
@@ -64,6 +65,17 @@ let state = readState() || {
|
||||
|
||||
main().catch(error => {
|
||||
log(`fatal: ${error instanceof Error ? error.stack || error.message : String(error)}`);
|
||||
if (dryRun) {
|
||||
updateState({
|
||||
status: 'failed',
|
||||
step: 'preflight_failed',
|
||||
progress: 100,
|
||||
message: '升级包预检失败,请按错误信息调整升级包',
|
||||
error: error instanceof Error ? error.message : '升级包预检异常退出',
|
||||
finishedAt: new Date().toISOString(),
|
||||
});
|
||||
return;
|
||||
}
|
||||
rollbackAfterFailure(error instanceof Error ? error.message : '升级任务异常退出').catch(rollbackError => {
|
||||
updateState({
|
||||
status: 'rollback_failed',
|
||||
@@ -85,7 +97,7 @@ async function main() {
|
||||
message: '正在检查升级包与运行环境',
|
||||
startedAt: state.startedAt || new Date().toISOString(),
|
||||
});
|
||||
logStep('开始升级任务', `任务 ${jobId} 使用${mode === 'hot' ? '热更新' : '冷更新'}模式,升级包 ${packageName}`);
|
||||
logStep('开始升级任务', `任务 ${jobId} 使用${mode === 'hot' ? '热更新' : '冷更新'}模式,升级包 ${packageName}${dryRun ? ',仅执行预检' : ''}`);
|
||||
|
||||
if (mode !== 'hot' && mode !== 'cold') {
|
||||
throw new Error('升级方式无效');
|
||||
@@ -118,8 +130,23 @@ async function main() {
|
||||
restartRequired: mode === 'cold' || validation.requiresRestart,
|
||||
packageHash: sha256(packagePath),
|
||||
changedFiles: files,
|
||||
dryRun,
|
||||
});
|
||||
|
||||
if (dryRun) {
|
||||
logStep('预检完成', `升级包可用于${mode === 'hot' ? '热更新' : '冷更新'},${mode === 'cold' || validation.requiresRestart ? '需要重启平台' : '无需重启平台'}`);
|
||||
updateState({
|
||||
status: 'succeeded',
|
||||
step: 'preflight_completed',
|
||||
progress: 100,
|
||||
message: `预检通过:共 ${files.length} 个文件,${mode === 'cold' || validation.requiresRestart ? '执行时需要重启平台' : '执行时无需重启平台'}`,
|
||||
finishedAt: new Date().toISOString(),
|
||||
restartRequired: mode === 'cold' || validation.requiresRestart,
|
||||
dryRun: true,
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
updateState({ step: 'backup_data', progress: 22, message: '正在创建数据库、存储与环境配置备份' });
|
||||
logStep('创建数据备份', '开始备份数据库、存储目录和环境配置');
|
||||
const backupFile = runCapture('bash', ['./scripts/backup-create.sh'], {
|
||||
|
||||
Reference in New Issue
Block a user