Skip to content

Commit 430fdb6

Browse files
committed
deploy 添加失败回滚
1 parent 69523c7 commit 430fdb6

2 files changed

Lines changed: 49 additions & 1 deletion

File tree

.github/workflows/deploy.yml

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,29 @@ jobs:
3535
script: |
3636
cd /home/ubuntu/involution-hell
3737
38-
# 构建新镜像(失败则整个 workflow 标红)
38+
# 保存当前镜像为回滚备份(首次部署时镜像可能不存在,忽略错误)
39+
docker tag involutionhell-backend:latest involutionhell-backend:rollback 2>/dev/null || true
40+
41+
# 构建新镜像(失败则整个 workflow 标红,旧容器不受影响)
3942
docker build -t involutionhell-backend:latest .
4043
4144
# 用新镜像重启服务
4245
docker compose up -d --remove-orphans
46+
47+
# 等待服务启动,最多 60 秒
48+
echo "等待服务健康检查..."
49+
for i in $(seq 1 12); do
50+
if curl -fsS "http://127.0.0.1:8080/api/v1/actuator/health" | grep -q '"status":"UP"'; then
51+
echo "✅ 部署成功,服务正常运行"
52+
exit 0
53+
fi
54+
echo "第 $i 次检查未就绪,5 秒后重试..."
55+
sleep 5
56+
done
57+
58+
# 健康检查超时,用备份镜像回滚
59+
echo "❌ 健康检查失败,正在回滚到上一个版本..."
60+
docker tag involutionhell-backend:rollback involutionhell-backend:latest
61+
docker compose up -d --remove-orphans
62+
echo "回滚完成,workflow 标红以提示本次部署失败"
63+
exit 1

README.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,33 @@ curl -X POST http://127.0.0.1:8080/api/auth/login \
122122
# 产物位于 target/backend
123123
```
124124

125+
## CI/CD 自动部署
126+
127+
推送到 `main` 分支后,GitHub Actions 会自动触发部署流程:
128+
129+
```
130+
push to main
131+
→ SCP 同步源码到服务器
132+
→ 服务器执行 docker build
133+
→ docker compose up -d 重启服务
134+
```
135+
136+
**生产环境健康检查端点:**
137+
138+
```
139+
GET https://api.involutionhell.com/api/v1/actuator/health
140+
```
141+
142+
返回 `{"status":"UP"}` 表示服务正常运行。
143+
144+
> [!IMPORTANT]
145+
> **关于部署失败与宕机风险:**
146+
>
147+
> - **`docker build` 阶段失败** → 安全,旧容器不受影响,GitHub Actions 标红但服务继续运行。
148+
> - **build 成功但新容器启动崩溃**(配置错误、数据库迁移异常等)→ 会短暂宕机。旧容器已被停止,新容器因 `restart: always` 持续重启但无法自愈,需人工介入。
149+
>
150+
> 合并前请确保本地执行 `./mvnw test` 通过,并确认 `.env` 所需的环境变量在服务器上已正确配置。
151+
125152
## 贡献规范
126153
- 保持代码可编译,提交前执行 `./mvnw test`
127154
- 业务逻辑请放在 `service` 层,保持 `controller` 层简洁。

0 commit comments

Comments
 (0)