SpringVortexNotes

启动前校验远程运行配置

zjc 于 2026-08-25 发布

代码环境

部署脚本如果只负责“把文件传上去并启动”,很容易掩盖一个危险场景:服务器缺少外置 application.yaml,服务带着镜像内置配置启动,看起来成功了,实际连的是错误环境。

这次脚本只上传模板:

& scp "deploy\config\$module\application.yaml.template" `
    "$($Remote):$AppDir/config/$module/application.yaml.template"

https://github.com/springvortex/spring-cloud-alibaba/blob/release/v1.0.0/deploy/scripts/windows/deploy.ps1

然后逐个检查远程运行配置是否存在:

foreach ($module in $modules) {
    & ssh $Remote "test -f '$AppDir/config/$module/application.yaml'" *> $null
    if ($LASTEXITCODE -ne 0) {
        $missingRuntimeConfigs += $module
    }
}

https://github.com/springvortex/spring-cloud-alibaba/blob/release/v1.0.0/deploy/scripts/windows/deploy.ps1

如果用户带上了 -Start,脚本不会“顺手”替服务器生成配置,而是直接取消启动:

if ($Start -and $missingRuntimeConfigs.Count -gt 0) {
    Write-Host "以下服务缺少运行配置:$($missingRuntimeConfigs -join ', ')"
    throw "远程运行配置未生成,已取消启动。"
}

https://github.com/springvortex/spring-cloud-alibaba/blob/release/v1.0.0/deploy/scripts/windows/deploy.ps1

这不方便,但是正确。运行配置可能被运维在服务器上改过,部署脚本无法判断模板里的地址、账号和密文是否适合当前环境。自动覆盖会丢配置,自动放任启动会错环境,两者都比“停下来让人处理”更危险。

.env 也保持同样边界:脚本会传输 .env.example,但不会创建或修改远程 .env。自定义镜像 tag 时只输出提醒:

if ($Tag -ne "1.0.0") {
    Write-Host "提醒:当前构建 tag 是 $Tag,请确保远程 .env 中 APP_TAG=$Tag。"
}

https://github.com/springvortex/spring-cloud-alibaba/blob/release/v1.0.0/deploy/scripts/windows/deploy.ps1

经验总结

自动化不等于替人做所有决定。传输产物可以自动,环境配置和密钥要留在部署机;启动前做存在性校验,缺失就停,是部署脚本该有的刹车。

评论

评论由 GitHub Discussions 承载,需要 GitHub 账号登录。