-
Notifications
You must be signed in to change notification settings - Fork 2
63 lines (53 loc) · 2.22 KB
/
deploy.yml
File metadata and controls
63 lines (53 loc) · 2.22 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
name: 构建并部署后端
on:
push:
branches: [main]
workflow_dispatch:
jobs:
deploy:
name: 在服务器上编译并部署
runs-on: ubuntu-latest
environment: production
steps:
- name: 检出代码
uses: actions/checkout@v4
- name: 将源码同步到服务器
uses: appleboy/scp-action@v0.1.7
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SERVER_SSH_KEY }}
source: "."
target: "/home/ubuntu/involution-hell"
- name: 在服务器上构建并启动
uses: appleboy/ssh-action@v1
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SERVER_SSH_KEY }}
# 命令超时设长一点,Native Image 编译需要时间
command_timeout: 30m
script: |
cd /home/ubuntu/involution-hell
# 保存当前镜像为回滚备份(首次部署时镜像可能不存在,忽略错误)
docker tag involutionhell-backend:latest involutionhell-backend:rollback 2>/dev/null || true
# 构建新镜像(失败则整个 workflow 标红,旧容器不受影响)
docker build -t involutionhell-backend:latest .
# 用新镜像重启服务
docker compose up -d --remove-orphans
# 等待服务启动,最多 60 秒
echo "等待服务健康检查..."
for i in $(seq 1 12); do
if docker exec involution-hell-backend curl -fsS "http://127.0.0.1:8080/api/v1/actuator/health" | grep -q '"status":"UP"'; then
echo "✅ 部署成功,服务正常运行"
exit 0
fi
echo "第 $i 次检查未就绪,5 秒后重试..."
sleep 5
done
# 健康检查超时,用备份镜像回滚
echo "❌ 健康检查失败,正在回滚到上一个版本..."
docker tag involutionhell-backend:rollback involutionhell-backend:latest
docker compose up -d --remove-orphans
echo "回滚完成,workflow 标红以提示本次部署失败"
exit 1