Skip to content

Commit cb25986

Browse files
committed
fix: update GitHub Actions workflows for version release builds
- Fix release-deploy.yml to build both backend and frontend - Add build-args for VITE_API_BASE in frontend builds - Improve tag naming logic to support GitHub Releases - Add frontend build job to develop-deploy.yml - Add version release guide documentation
1 parent 3696c24 commit cb25986

3 files changed

Lines changed: 207 additions & 8 deletions

File tree

.github/workflows/develop-deploy.yml

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
name: Deploy Rote Backend
1+
name: Deploy Rote (Backend & Frontend)
22

33
on:
44
push:
55
branches:
66
- develop
77

88
jobs:
9-
build-and-deploy:
9+
build-backend:
1010
runs-on: ubuntu-latest
1111

1212
steps:
@@ -22,7 +22,7 @@ jobs:
2222
username: ${{ secrets.DOCKERHUB_USERNAME }}
2323
password: ${{ secrets.DOCKERHUB_TOKEN }}
2424

25-
- name: Build and push Docker image
25+
- name: Build and push backend Docker image
2626
uses: docker/build-push-action@v5
2727
with:
2828
context: ./server
@@ -32,3 +32,32 @@ jobs:
3232
${{ secrets.DOCKERHUB_USERNAME }}/rote-backend:latest-dev
3333
${{ secrets.DOCKERHUB_USERNAME }}/rote-backend:develop
3434
${{ secrets.DOCKERHUB_USERNAME }}/rote-backend:develop-${{ github.sha }}
35+
36+
build-frontend:
37+
runs-on: ubuntu-latest
38+
39+
steps:
40+
- name: Checkout code
41+
uses: actions/checkout@v4
42+
43+
- name: Set up Docker Buildx
44+
uses: docker/setup-buildx-action@v3
45+
46+
- name: Log in to Docker Hub
47+
uses: docker/login-action@v3
48+
with:
49+
username: ${{ secrets.DOCKERHUB_USERNAME }}
50+
password: ${{ secrets.DOCKERHUB_TOKEN }}
51+
52+
- name: Build and push frontend Docker image
53+
uses: docker/build-push-action@v5
54+
with:
55+
context: ./web
56+
file: ./web/Dockerfile
57+
push: true
58+
build-args: |
59+
VITE_API_BASE=${{ secrets.VITE_API_BASE || 'http://localhost:3000' }}
60+
tags: |
61+
${{ secrets.DOCKERHUB_USERNAME }}/rote-frontend:latest-dev
62+
${{ secrets.DOCKERHUB_USERNAME }}/rote-frontend:develop
63+
${{ secrets.DOCKERHUB_USERNAME }}/rote-frontend:develop-${{ github.sha }}

.github/workflows/release-deploy.yml

Lines changed: 33 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
name: Release Deploy Rote Backend
1+
name: Release Deploy Rote (Backend & Frontend)
22

33
on:
44
push:
@@ -8,7 +8,7 @@ on:
88
types: [published]
99

1010
jobs:
11-
build-and-deploy:
11+
build-backend:
1212
runs-on: ubuntu-latest
1313

1414
steps:
@@ -24,12 +24,40 @@ jobs:
2424
username: ${{ secrets.DOCKERHUB_USERNAME }}
2525
password: ${{ secrets.DOCKERHUB_TOKEN }}
2626

27-
- name: Build and push Docker image
27+
- name: Build and push backend Docker image
28+
uses: docker/build-push-action@v5
29+
with:
30+
context: ./server
31+
file: ./server/Dockerfile
32+
push: true
33+
tags: |
34+
${{ secrets.DOCKERHUB_USERNAME }}/rote-backend:latest
35+
${{ secrets.DOCKERHUB_USERNAME }}/rote-backend:${{ github.event.release.tag_name || github.ref_name || 'main' }}
36+
37+
build-frontend:
38+
runs-on: ubuntu-latest
39+
40+
steps:
41+
- name: Checkout code
42+
uses: actions/checkout@v4
43+
44+
- name: Set up Docker Buildx
45+
uses: docker/setup-buildx-action@v3
46+
47+
- name: Log in to Docker Hub
48+
uses: docker/login-action@v3
49+
with:
50+
username: ${{ secrets.DOCKERHUB_USERNAME }}
51+
password: ${{ secrets.DOCKERHUB_TOKEN }}
52+
53+
- name: Build and push frontend Docker image
2854
uses: docker/build-push-action@v5
2955
with:
3056
context: ./web
3157
file: ./web/Dockerfile
3258
push: true
59+
build-args: |
60+
VITE_API_BASE=${{ secrets.VITE_API_BASE || 'http://localhost:3000' }}
3361
tags: |
34-
${{ secrets.DOCKERHUB_USERNAME }}/rote-backend:latest
35-
${{ secrets.DOCKERHUB_USERNAME }}/rote-backend:${{ github.ref_type == 'tag' && github.ref_name || 'main' }}
62+
${{ secrets.DOCKERHUB_USERNAME }}/rote-frontend:latest
63+
${{ secrets.DOCKERHUB_USERNAME }}/rote-frontend:${{ github.event.release.tag_name || github.ref_name || 'main' }}
Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,142 @@
1+
# 版本发布构建指南
2+
3+
本文档说明如何通过 GitHub Release 触发版本构建和部署。
4+
5+
## 发布版本的两种方式
6+
7+
### 方式 1: 通过 GitHub Release 发布(推荐)
8+
9+
这是推荐的版本发布方式,会自动触发 Docker 镜像构建。
10+
11+
#### 步骤
12+
13+
1. **创建 Git 标签**
14+
15+
```bash
16+
# 创建带注释的标签(推荐)
17+
git tag -a v1.0.0 -m "Release version 1.0.0"
18+
19+
# 推送到远程
20+
git push origin v1.0.0
21+
```
22+
23+
2. **在 GitHub 上创建 Release**
24+
25+
- 访问 GitHub 仓库页面
26+
- 点击右侧 "Releases" → "Draft a new release"
27+
- 选择刚创建的标签(如 `v1.0.0`
28+
- 填写 Release 标题和描述
29+
- 点击 "Publish release"
30+
31+
3. **自动触发构建**
32+
- GitHub Actions 会自动检测到 Release 发布事件
33+
- 触发 `release-deploy.yml` workflow
34+
- 自动构建并推送 Docker 镜像到 Docker Hub
35+
36+
#### 生成的 Docker 镜像标签
37+
38+
发布 `v1.0.0` 版本后,会生成以下镜像:
39+
40+
- **后端镜像**:
41+
42+
- `rote-backend:latest`
43+
- `rote-backend:v1.0.0`
44+
45+
- **前端镜像**:
46+
- `rote-frontend:latest`
47+
- `rote-frontend:v1.0.0`
48+
49+
### 方式 2: 直接推送到 main 分支
50+
51+
直接推送到 `main` 分支也会触发构建,但不会使用版本标签。
52+
53+
```bash
54+
git checkout main
55+
git merge develop
56+
git push origin main
57+
```
58+
59+
#### 生成的 Docker 镜像标签
60+
61+
- **后端镜像**: `rote-backend:latest`, `rote-backend:main`
62+
- **前端镜像**: `rote-frontend:latest`, `rote-frontend:main`
63+
64+
## 版本号规范
65+
66+
建议使用 [语义化版本](https://semver.org/) 规范:
67+
68+
- **主版本号** (MAJOR): 不兼容的 API 修改
69+
- **次版本号** (MINOR): 向下兼容的功能性新增
70+
- **修订号** (PATCH): 向下兼容的问题修正
71+
72+
示例:
73+
74+
- `v1.0.0` - 首个稳定版本
75+
- `v1.1.0` - 新增功能
76+
- `v1.1.1` - 修复 bug
77+
- `v2.0.0` - 重大更新,不兼容旧版本
78+
79+
## 环境变量配置
80+
81+
在 GitHub Repository Settings → Secrets 中配置:
82+
83+
- `DOCKERHUB_USERNAME`: Docker Hub 用户名
84+
- `DOCKERHUB_TOKEN`: Docker Hub 访问令牌
85+
- `VITE_API_BASE`: 前端 API 基础 URL(生产环境必须配置)
86+
87+
## 验证构建
88+
89+
构建完成后,可以在以下位置验证:
90+
91+
1. **GitHub Actions**: 查看 workflow 运行状态
92+
2. **Docker Hub**: 检查镜像是否已推送
93+
- 访问 `https://hub.docker.com/r/<username>/rote-backend/tags`
94+
- 访问 `https://hub.docker.com/r/<username>/rote-frontend/tags`
95+
96+
## 使用构建的镜像
97+
98+
### Docker Compose
99+
100+
```yaml
101+
services:
102+
rote-backend:
103+
image: <username>/rote-backend:v1.0.0
104+
# ...
105+
106+
rote-frontend:
107+
image: <username>/rote-frontend:v1.0.0
108+
# ...
109+
```
110+
111+
### Docker 命令
112+
113+
```bash
114+
# 拉取特定版本
115+
docker pull <username>/rote-backend:v1.0.0
116+
docker pull <username>/rote-frontend:v1.0.0
117+
118+
# 运行容器
119+
docker run -d <username>/rote-backend:v1.0.0
120+
docker run -d <username>/rote-frontend:v1.0.0
121+
```
122+
123+
## 故障排查
124+
125+
### 构建失败
126+
127+
1. 检查 GitHub Actions 日志
128+
2. 确认 Secrets 配置正确
129+
3. 检查 Dockerfile 是否有语法错误
130+
4. 确认代码已推送到正确的分支
131+
132+
### 镜像标签不正确
133+
134+
- 检查 workflow 中的标签逻辑
135+
- 确认 Release 标签格式正确(建议使用 `v` 前缀)
136+
137+
## 注意事项
138+
139+
1. **生产环境**: 发布到 `main` 分支或创建 Release 前,确保代码已充分测试
140+
2. **版本标签**: 建议使用带 `v` 前缀的标签(如 `v1.0.0`
141+
3. **环境变量**: 生产环境必须配置 `VITE_API_BASE`,否则会使用默认值
142+
4. **镜像标签**: `latest` 标签始终指向最新构建,建议生产环境使用具体版本号

0 commit comments

Comments
 (0)