优化部署脚本非交互变量支持
This commit is contained in:
+65
-16
@@ -33,6 +33,7 @@ trap {
|
||||
|
||||
function Wait-ForExit {
|
||||
if ($env:CI -eq "true") { return }
|
||||
if ($env:UPDATE_NO_WAIT -eq "1") { return }
|
||||
Write-Host ""
|
||||
Read-Host "按 Enter 键退出"
|
||||
}
|
||||
@@ -46,7 +47,17 @@ function Write-Warn { param($Msg) Write-Host "⚠️ $Msg" -ForegroundColor Yell
|
||||
if ($args -contains "-h" -or $args -contains "--help") {
|
||||
Write-Host "用法: .\update.ps1"
|
||||
Write-Host ""
|
||||
Write-Host "脚本将提示选择更新方式,默认拉取仓库并更新镜像。"
|
||||
Write-Host "默认拉取仓库并更新镜像;也可通过环境变量跳过交互选择。"
|
||||
Write-Host ""
|
||||
Write-Host "环境变量:"
|
||||
Write-Host " UPDATE_MODE=full|image"
|
||||
Write-Host " full 更新并拉取仓库(git pull)+ 更新镜像并重启"
|
||||
Write-Host " image 仅更新镜像并重启(跳过 git pull)"
|
||||
Write-Host " UPDATE_SKIP_REPO_UPDATE=true|false"
|
||||
Write-Host " true 等同 UPDATE_MODE=image"
|
||||
Write-Host " false 等同 UPDATE_MODE=full"
|
||||
Write-Host " UPDATE_NO_WAIT=1"
|
||||
Write-Host " 结束或失败时不等待按 Enter"
|
||||
exit 0
|
||||
}
|
||||
|
||||
@@ -58,24 +69,62 @@ if (-not (Test-Path $composePath)) { Write-Err "未找到 docker-compose.yml,
|
||||
Set-Location $scriptDir
|
||||
Write-Step "📁 项目目录: $scriptDir"
|
||||
|
||||
# ==================== 命令行内选择 ====================
|
||||
Write-Host ""
|
||||
Write-Host "请选择更新方式:"
|
||||
Write-Host " [1] 更新并拉取仓库(git pull)+ 更新镜像并重启(默认)"
|
||||
Write-Host " [2] 仅更新镜像并重启(跳过 git pull)"
|
||||
$choice = Read-Host "请选择 [1/2,回车默认 1]"
|
||||
if ([string]::IsNullOrWhiteSpace($choice)) { $choice = "1" }
|
||||
|
||||
$skipRepoUpdate = $false
|
||||
switch ($choice) {
|
||||
"2" { $skipRepoUpdate = $true }
|
||||
"1" { }
|
||||
default {
|
||||
Write-Warn "无效选择,将使用默认:更新并拉取仓库"
|
||||
$skipRepoUpdate = $false
|
||||
function ConvertTo-BoolEnv {
|
||||
param([string]$Value)
|
||||
$v = if ($null -eq $Value) { "" } else { $Value.Trim().ToLowerInvariant() }
|
||||
switch ($v) {
|
||||
{ $_ -in @("1", "true", "yes", "y", "on") } { return $true }
|
||||
{ $_ -in @("0", "false", "no", "n", "off", "") } { return $false }
|
||||
default { Write-Err "布尔变量值不合法: $Value(支持 true/false/1/0/yes/no/y/n/on/off)" }
|
||||
}
|
||||
}
|
||||
|
||||
function Resolve-UpdateMode {
|
||||
if (-not [string]::IsNullOrWhiteSpace($env:UPDATE_SKIP_REPO_UPDATE)) {
|
||||
$skip = ConvertTo-BoolEnv $env:UPDATE_SKIP_REPO_UPDATE
|
||||
Write-Step "使用环境变量: UPDATE_SKIP_REPO_UPDATE=$skip"
|
||||
return $skip
|
||||
}
|
||||
|
||||
if (-not [string]::IsNullOrWhiteSpace($env:UPDATE_MODE)) {
|
||||
$mode = $env:UPDATE_MODE.Trim().ToLowerInvariant()
|
||||
switch ($mode) {
|
||||
{ $_ -in @("full", "repo", "pull", "git", "1") } {
|
||||
Write-Step "使用环境变量: UPDATE_MODE=$($env:UPDATE_MODE)"
|
||||
return $false
|
||||
}
|
||||
{ $_ -in @("image", "images", "docker", "skip-git", "skip_repo", "skip-repo", "2") } {
|
||||
Write-Step "使用环境变量: UPDATE_MODE=$($env:UPDATE_MODE)"
|
||||
return $true
|
||||
}
|
||||
default { Write-Err "UPDATE_MODE 只能是 full 或 image,当前为: $($env:UPDATE_MODE)" }
|
||||
}
|
||||
}
|
||||
|
||||
if ($env:UPDATE_NON_INTERACTIVE -eq "1" -or $env:CI -eq "true") {
|
||||
Write-Step "使用默认更新方式: 更新并拉取仓库(git pull)+ 更新镜像并重启"
|
||||
return $false
|
||||
}
|
||||
|
||||
Write-Host ""
|
||||
Write-Host "请选择更新方式:"
|
||||
Write-Host " [1] 更新并拉取仓库(git pull)+ 更新镜像并重启(默认)"
|
||||
Write-Host " [2] 仅更新镜像并重启(跳过 git pull)"
|
||||
$choice = Read-Host "请选择 [1/2,回车默认 1]"
|
||||
if ([string]::IsNullOrWhiteSpace($choice)) { $choice = "1" }
|
||||
|
||||
switch ($choice) {
|
||||
"2" { return $true }
|
||||
"1" { return $false }
|
||||
default {
|
||||
Write-Warn "无效选择,将使用默认:更新并拉取仓库"
|
||||
return $false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$skipRepoUpdate = Resolve-UpdateMode
|
||||
|
||||
# ==================== 拉取仓库 ====================
|
||||
if (-not $skipRepoUpdate) {
|
||||
Write-Host ""
|
||||
|
||||
Reference in New Issue
Block a user