Skip to content

Commit b5804a8

Browse files
committed
improvement(CI/CD): 完善 GitHub Actions 自动部署流程
- 修复 git pull 拉取问题,使用 git fetch + git checkout 确保拉取最新代码 - 添加前端构建环境变量配置 (VITE_SHORT_BASE, VITE_API_BASE) - 添加后端测试步骤,确保测试通过才能部署 - 修复 systemd 环境变量名称 (app.domain -> APP_DOMAIN) - 优化构建命令 (npm ci --prefer-offline, mvn -q 静默模式) - 添加服务启动健康检查和故障日志输出 - 添加失败和成功的详细通知
1 parent 4ef4e6f commit b5804a8

File tree

1 file changed

+49
-15
lines changed

1 file changed

+49
-15
lines changed

.github/workflows/deploy.yml

Lines changed: 49 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@ jobs:
2828
cd web
2929
npm ci
3030
npm run build
31+
env:
32+
VITE_SHORT_BASE: ${{ secrets.APP_DOMAIN }}
33+
VITE_API_BASE: ${{ secrets.API_BASE || '' }}
3134

3235
# 4. 设置 Java 环境
3336
- name: Setup Java
@@ -37,11 +40,25 @@ jobs:
3740
java-version: '17'
3841
cache: 'maven'
3942

40-
# 5. 构建后端
41-
- name: Build Backend
43+
# 5. 运行后端测试
44+
- name: Run Backend Tests
45+
run: mvn clean test
46+
env:
47+
APP_DOMAIN: ${{ secrets.APP_DOMAIN }}
48+
DB_PASSWORD: ${{ secrets.DB_PASSWORD }}
49+
JWT_SECRET: ${{ secrets.JWT_SECRET }}
50+
REDIS_PASSWORD: ${{ secrets.REDIS_PASSWORD }}
51+
52+
# 6. 构建后端(跳过测试,因为已经运行过)
53+
- name: Build Backend Package
4254
run: mvn clean package -DskipTests
55+
env:
56+
APP_DOMAIN: ${{ secrets.APP_DOMAIN }}
57+
DB_PASSWORD: ${{ secrets.DB_PASSWORD }}
58+
JWT_SECRET: ${{ secrets.JWT_SECRET }}
59+
REDIS_PASSWORD: ${{ secrets.REDIS_PASSWORD }}
4360

44-
# 6. 部署到服务器
61+
# 7. 部署到服务器
4562
- name: Deploy to Server
4663
uses: appleboy/[email protected]
4764
env:
@@ -57,30 +74,47 @@ jobs:
5774
envs: APP_DOMAIN,DB_PASSWORD,JWT_SECRET,REDIS_PASSWORD
5875
script: |
5976
cd /opt/TinyFlow
60-
git pull origin master
61-
77+
# 拉取最新代码(关键:确保本地更改被丢弃)
78+
git fetch origin
79+
git checkout origin/$(git symbolic-ref --short HEAD)
80+
6281
# 更新 systemd 配置文件中的环境变量
63-
sudo sed -i "s|Environment=\"app.domain=.*\"|Environment=\"app.domain=$APP_DOMAIN\"|g" /etc/systemd/system/tinyflow.service
82+
sudo sed -i "s|Environment=\"APP_DOMAIN=.*\"|Environment=\"APP_DOMAIN=$APP_DOMAIN\"|g" /etc/systemd/system/tinyflow.service
6483
sudo sed -i "s|Environment=\"DB_PASSWORD=.*\"|Environment=\"DB_PASSWORD=$DB_PASSWORD\"|g" /etc/systemd/system/tinyflow.service
6584
sudo sed -i "s|Environment=\"JWT_SECRET=.*\"|Environment=\"JWT_SECRET=$JWT_SECRET\"|g" /etc/systemd/system/tinyflow.service
6685
sudo sed -i "s|Environment=\"REDIS_PASSWORD=.*\"|Environment=\"REDIS_PASSWORD=$REDIS_PASSWORD\"|g" /etc/systemd/system/tinyflow.service
6786
6887
# 重新构建前端
6988
cd web
70-
npm ci
89+
npm ci --prefer-offline --no-audit
7190
npm run build
72-
91+
7392
# 重新构建后端
7493
cd ..
75-
mvn clean package -DskipTests
76-
94+
mvn clean package -DskipTests -q
95+
7796
# 重新加载 systemd 并重启服务
7897
sudo systemctl daemon-reload
79-
systemctl restart tinyflow
80-
81-
echo "✅ 部署完成!"
98+
sudo systemctl restart tinyflow
99+
100+
# 等待服务启动
101+
sleep 3
102+
103+
# 健康检查
104+
if curl -f http://localhost:8080/actuator/health > /dev/null 2>&1; then
105+
echo "✅ 部署完成!服务已启动"
106+
else
107+
echo "❌ 服务启动失败,请检查日志"
108+
journalctl -u tinyflow -n 50
109+
exit 1
110+
fi
111+
112+
# 8. 部署失败通知(可选)
113+
- name: Deployment Failed
114+
if: failure()
115+
run: echo "❌ TinyFlow 部署失败!请检查 GitHub Actions 日志"
82116

83-
# 7. 部署成功通知(可选)
117+
# 9. 部署成功通知
84118
- name: Deployment Success
85119
if: success()
86-
run: echo " TinyFlow 部署成功!"
120+
run: echo " TinyFlow 部署成功!所有测试已通过,部署完成。"

0 commit comments

Comments
 (0)