Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
P
pac
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
ai-tools
pac
Commits
d0da9bca
Commit
d0da9bca
authored
Oct 08, 2026
by
luoqi
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix(deploy): migrate PAC explicitly before replacing app containers
parent
8d1884e3
Pipeline
#3716
failed in 0 seconds
Changes
1
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
11 additions
and
8 deletions
+11
-8
deploy/deploy-prod.sh
+11
-8
No files found.
deploy/deploy-prod.sh
View file @
d0da9bca
...
@@ -125,18 +125,23 @@ main() {
...
@@ -125,18 +125,23 @@ main() {
fi
fi
done
done
fi
fi
# 迁移明确先完成,再替换业务容器;--no-deps 下不依赖 Compose 隐式排序。
log
"执行数据库迁移"
"
${
COMPOSE
[@]
}
"
run
--rm
--no-deps
pac-migrate
local
RUNTIME_SERVICES
=(
pac-service pac-web
)
[[
"
${
WITH_ASR
:-
0
}
"
==
"1"
]]
&&
RUNTIME_SERVICES+
=(
pac-asr
)
log
"force-recreate(不信 compose 的重建判定)"
log
"force-recreate(不信 compose 的重建判定)"
if
!
"
${
COMPOSE
[@]
}
"
up
-d
--no-deps
--force-recreate
"
${
SERVICES
[@]
}
"
;
then
if
!
"
${
COMPOSE
[@]
}
"
up
-d
--no-deps
--force-recreate
"
${
RUNTIME_
SERVICES
[@]
}
"
;
then
warn
"force-recreate 失败(疑似 rootless 删不掉运行中容器的网络进程),回退:清残留 → stop → 重建"
warn
"force-recreate 失败(疑似 rootless 删不掉运行中容器的网络进程),回退:清残留 → stop → 重建"
local
proj_r svc_r leftover
local
proj_r svc_r leftover
proj_r
=
$(
basename
"
$PWD
"
)
proj_r
=
$(
basename
"
$PWD
"
)
for
svc_r
in
"
${
SERVICES
[@]
}
"
;
do
for
svc_r
in
"
${
RUNTIME_
SERVICES
[@]
}
"
;
do
# 失败会留下带 hash 前缀的半成品容器(如 b69b5bec_pac-pac-service-1),不清则重建报名字冲突
# 失败会留下带 hash 前缀的半成品容器(如 b69b5bec_pac-pac-service-1),不清则重建报名字冲突
leftover
=
$(
docker ps
-a
--format
'{{.Names}}'
2>/dev/null |
grep
-E
"_
${
proj_r
}
-
${
svc_r
}
-1$"
||
true
)
leftover
=
$(
docker ps
-a
--format
'{{.Names}}'
2>/dev/null |
grep
-E
"_
${
proj_r
}
-
${
svc_r
}
-1$"
||
true
)
[[
-n
"
$leftover
"
]]
&&
docker rm
-f
$leftover
>
/dev/null 2>&1
&&
log
" 清理残留容器
$leftover
"
[[
-n
"
$leftover
"
]]
&&
docker rm
-f
$leftover
>
/dev/null 2>&1
&&
log
" 清理残留容器
$leftover
"
done
done
"
${
COMPOSE
[@]
}
"
stop
"
${
SERVICES
[@]
}
"
||
true
"
${
COMPOSE
[@]
}
"
stop
"
${
RUNTIME_
SERVICES
[@]
}
"
||
true
"
${
COMPOSE
[@]
}
"
up
-d
--no-deps
--force-recreate
"
${
SERVICES
[@]
}
"
"
${
COMPOSE
[@]
}
"
up
-d
--no-deps
--force-recreate
"
${
RUNTIME_
SERVICES
[@]
}
"
fi
fi
# ── 部署后硬验证:任一不过 = 部署失败 ─────────────────────────────
# ── 部署后硬验证:任一不过 = 部署失败 ─────────────────────────────
...
@@ -150,10 +155,8 @@ main() {
...
@@ -150,10 +155,8 @@ main() {
echo
"
$svc
OK (
${
want
:7:12
}
)"
echo
"
$svc
OK (
${
want
:7:12
}
)"
done
done
log
"验证 2/3:数据库迁移无 pending(migrate 容器 exit 0 且 deploy 干净)"
log
"验证 2/3:数据库迁移无 pending(迁移命令成功且 status 干净)"
local
mexit status_out
local
status_out
mexit
=
$(
docker inspect
"
${
proj
}
-pac-migrate-1"
--format
'{{.State.ExitCode}}'
)
[[
"
$mexit
"
==
"0"
]]
||
die
"migrate 容器 exit=
$mexit
(看 docker logs
${
proj
}
-pac-migrate-1)"
# 注 1:prisma 的"新版本提示框"位置不固定(异步)→ 不能 tail 截断,全量输出里找;
# 注 1:prisma 的"新版本提示框"位置不固定(异步)→ 不能 tail 截断,全量输出里找;
# 注 2:pipefail 下 `cmd | grep -q` 会因 grep 提前退出给 cmd 发 SIGPIPE → 管道 141 误判失败
# 注 2:pipefail 下 `cmd | grep -q` 会因 grep 提前退出给 cmd 发 SIGPIPE → 管道 141 误判失败
# → 先落变量再 grep。
# → 先落变量再 grep。
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment