Make admin upgrade restart non-blocking
This commit is contained in:
@@ -178,24 +178,17 @@ async function main() {
|
||||
run('pnpm', ['run', 'build'], { cwd: projectRoot, label: '构建平台' });
|
||||
logStep('平台构建完成', '生产构建已完成');
|
||||
|
||||
updateState({ step: 'restart', progress: 86, message: '正在重启平台进程' });
|
||||
logStep('重启平台', '冷更新需要重启平台进程,重启后升级状态会从磁盘继续读取');
|
||||
restartPlatform();
|
||||
logStep('平台重启命令完成', '平台重启命令已执行,开始等待健康检查');
|
||||
|
||||
updateState({ step: 'health_check', progress: 94, message: '正在检查平台健康状态' });
|
||||
logStep('健康检查', '正在确认平台接口恢复正常');
|
||||
waitForHealth();
|
||||
logStep('冷更新完成', '平台已重启并通过健康检查');
|
||||
|
||||
updateState({ step: 'restart', progress: 94, message: '构建已完成,正在后台重启平台进程' });
|
||||
logStep('冷更新完成', '升级文件已应用并完成构建,将在后台重启平台进程');
|
||||
updateState({
|
||||
status: 'succeeded',
|
||||
step: 'completed',
|
||||
progress: 100,
|
||||
message: '冷更新成功,平台已重启并通过健康检查',
|
||||
message: '冷更新成功,平台正在后台重启',
|
||||
finishedAt: new Date().toISOString(),
|
||||
restartRequired: true,
|
||||
});
|
||||
restartPlatform({ detached: true });
|
||||
}
|
||||
|
||||
async function rollbackAfterFailure(message) {
|
||||
@@ -229,10 +222,7 @@ async function rollbackAfterFailure(message) {
|
||||
try {
|
||||
logStep('回滚后重建', '冷更新失败后正在重新构建回滚版本');
|
||||
run('pnpm', ['run', 'build'], { cwd: projectRoot, label: '回滚后重新构建' });
|
||||
logStep('回滚后重启', '正在重启回滚后的平台版本');
|
||||
restartPlatform();
|
||||
waitForHealth();
|
||||
logStep('回滚后健康检查通过', '平台已恢复到升级前版本');
|
||||
logStep('回滚后重启', '将后台重启回滚后的平台版本');
|
||||
} catch (error) {
|
||||
throw new Error(`回滚后平台恢复检查失败: ${error instanceof Error ? error.message : String(error)}`);
|
||||
}
|
||||
@@ -247,6 +237,9 @@ async function rollbackAfterFailure(message) {
|
||||
error: originalError,
|
||||
finishedAt: new Date().toISOString(),
|
||||
});
|
||||
if (mode === 'cold') {
|
||||
restartPlatform({ detached: true });
|
||||
}
|
||||
}
|
||||
|
||||
function parseArgs(argv) {
|
||||
@@ -471,8 +464,19 @@ function restoreSourceBackup(source) {
|
||||
], { cwd: projectRoot, label: '恢复源码快照' });
|
||||
}
|
||||
|
||||
function restartPlatform() {
|
||||
function restartPlatform(options = {}) {
|
||||
const restartCommand = process.env.UPGRADE_RESTART_COMMAND || detectRestartCommand();
|
||||
if (options.detached) {
|
||||
const logFile = path.join(jobDir, 'restart.log');
|
||||
const detachedCommand = `nohup bash -lc ${JSON.stringify(restartCommand)} >> ${JSON.stringify(logFile)} 2>&1 &`;
|
||||
spawnSync('bash', ['-lc', detachedCommand], {
|
||||
cwd: projectRoot,
|
||||
env: { ...process.env, COREPACK_HOME: process.env.COREPACK_HOME || '/tmp/corepack' },
|
||||
encoding: 'utf8',
|
||||
});
|
||||
logStep('后台重启平台', `已触发后台重启命令,日志:${logFile}`);
|
||||
return;
|
||||
}
|
||||
run('bash', ['-lc', restartCommand], { cwd: projectRoot, label: '重启平台' });
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user