mirror of
https://git.bjxgj.com/xgj/xgj-actions.git
synced 2025-10-14 06:33:37 +08:00
Merge branch 'v1'
This commit is contained in:
@@ -2,16 +2,15 @@
|
|||||||
|
|
||||||
[](https://github.com/features/actions)
|
[](https://github.com/features/actions)
|
||||||
|
|
||||||
自动化 Web 项目发布流程的 GitHub Action,包括版本发布、Docker 镜像构建和推送等完整的 CI/CD 流程。
|
自动化 Web 项目发布流程的 GitHub Action,专注于版本管理和发布核心功能。
|
||||||
|
|
||||||
## 功能特性
|
## 功能特性
|
||||||
|
|
||||||
- 🚀 **自动化发布**: 支持 `release-it` 工具进行版本管理和发布
|
- 🚀 **自动化发布**: 支持任意发布命令进行版本管理和发布
|
||||||
- 🐳 **Docker 集成**: 自动构建和推送 Docker 镜像到私有仓库
|
- 🌍 **环境变量支持**: 支持传递任意数量的环境变量给发布命令
|
||||||
- 🏷️ **灵活标签**: 支持自定义 Docker 标签,自动生成版本标签
|
- 📦 **版本信息**: 自动获取和输出版本号信息
|
||||||
- 📊 **Sentry 集成**: 可选的 Sentry 错误监控集成
|
- 🔧 **简洁配置**: 最小化配置,专注于发布核心功能
|
||||||
- 🔧 **高度可配置**: 丰富的输入参数满足不同项目需求
|
- ✅ **灵活使用**: 可配置发布命令,适应不同项目需求
|
||||||
- ✅ **参数验证**: 自动验证必需参数和文件存在性
|
|
||||||
|
|
||||||
## 快速开始
|
## 快速开始
|
||||||
|
|
||||||
@@ -20,8 +19,8 @@
|
|||||||
```yaml
|
```yaml
|
||||||
- name: 发布Web项目
|
- name: 发布Web项目
|
||||||
uses: actions/xgj/release-web@main
|
uses: actions/xgj/release-web@main
|
||||||
with:
|
env:
|
||||||
gitea-token: ${{ secrets.GITEA_TOKEN }}
|
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
|
||||||
```
|
```
|
||||||
|
|
||||||
### 使用环境变量
|
### 使用环境变量
|
||||||
@@ -29,10 +28,9 @@
|
|||||||
```yaml
|
```yaml
|
||||||
- name: 发布Web项目
|
- name: 发布Web项目
|
||||||
uses: actions/xgj/release-web@main
|
uses: actions/xgj/release-web@main
|
||||||
with:
|
|
||||||
gitea-token: ${{ secrets.GITEA_TOKEN }}
|
|
||||||
env:
|
env:
|
||||||
# 🌍 可以传递任意数量的环境变量给发布命令
|
# 🌍 可以传递任意数量的环境变量给发布命令
|
||||||
|
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
|
||||||
APP_ENV: production
|
APP_ENV: production
|
||||||
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
|
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
|
||||||
SENTRY_DSN: ${{ vars.SENTRY_DSN }}
|
SENTRY_DSN: ${{ vars.SENTRY_DSN }}
|
||||||
@@ -49,34 +47,21 @@
|
|||||||
- name: 发布Web项目
|
- name: 发布Web项目
|
||||||
uses: actions/xgj/release-web@main
|
uses: actions/xgj/release-web@main
|
||||||
with:
|
with:
|
||||||
gitea-token: ${{ secrets.GITEA_TOKEN }}
|
release-command: "npm run release -- --release -V"
|
||||||
app-env: "production"
|
env:
|
||||||
sentry-auth-token: ${{ secrets.SENTRY_AUTH_TOKEN }}
|
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
|
||||||
sentry-dsn: ${{ vars.SENTRY_DSN }}
|
APP_ENV: "production"
|
||||||
enable-sentry: "true"
|
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
|
||||||
docker-registry: "docker-registry.bjxgj.com"
|
SENTRY_DSN: ${{ vars.SENTRY_DSN }}
|
||||||
dockerfile-path: "./container/prod/Dockerfile"
|
SENTRY_VITE: "true"
|
||||||
docker-tags: |
|
|
||||||
stable
|
|
||||||
v2024
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## 输入参数
|
## 输入参数
|
||||||
|
|
||||||
| 参数名 | 描述 | 必需 | 默认值 |
|
| 参数名 | 描述 | 必需 | 默认值 |
|
||||||
| --------------------- | ------------------------- | ---- | --------------------------------- |
|
| ----------------- | ------------------------- | ---- | --------------------------------- |
|
||||||
| `gitea-token` | Gitea 访问令牌 | ✅ | - |
|
| `release-command` | 发布命令 | ❌ | `npm run release -- --release -V` |
|
||||||
| `app-env` | 应用环境 | ❌ | `production` |
|
| `node-debug` | 是否启用 Node.js 调试模式 | ❌ | `false` |
|
||||||
| `sentry-auth-token` | Sentry 认证令牌 | ❌ | - |
|
|
||||||
| `sentry-dsn` | Sentry DSN 配置 | ❌ | - |
|
|
||||||
| `enable-sentry` | 是否启用 Sentry | ❌ | `false` |
|
|
||||||
| `release-command` | 发布命令 | ❌ | `npm run release -- --release -V` |
|
|
||||||
| `docker-registry` | Docker 仓库地址 | ❌ | `docker-registry.bjxgj.com` |
|
|
||||||
| `docker-context` | Docker 构建上下文路径 | ❌ | `.` |
|
|
||||||
| `dockerfile-path` | Dockerfile 路径 | ❌ | `./container/dev/Dockerfile` |
|
|
||||||
| `docker-tags` | 额外的 Docker 标签 | ❌ | - |
|
|
||||||
| `enable-docker-build` | 是否执行 Docker 构建 | ❌ | `true` |
|
|
||||||
| `node-debug` | 是否启用 Node.js 调试模式 | ❌ | `false` |
|
|
||||||
|
|
||||||
## 环境变量支持
|
## 环境变量支持
|
||||||
|
|
||||||
@@ -84,10 +69,9 @@ Action 支持通过 `env` 传递**任意数量**的环境变量给发布命令
|
|||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- uses: actions/xgj/release-web@main
|
- uses: actions/xgj/release-web@main
|
||||||
with:
|
|
||||||
gitea-token: ${{ secrets.GITEA_TOKEN }}
|
|
||||||
env:
|
env:
|
||||||
# 🌍 任意环境变量都会自动传递给发布命令
|
# 🌍 任意环境变量都会自动传递给发布命令
|
||||||
|
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
|
||||||
APP_ENV: production
|
APP_ENV: production
|
||||||
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_TOKEN }}
|
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_TOKEN }}
|
||||||
CUSTOM_VAR: "your-value"
|
CUSTOM_VAR: "your-value"
|
||||||
@@ -100,6 +84,7 @@ Action 支持通过 `env` 传递**任意数量**的环境变量给发布命令
|
|||||||
|
|
||||||
| 环境变量名 | 描述 | 示例值 |
|
| 环境变量名 | 描述 | 示例值 |
|
||||||
| ------------------- | ---------------- | ----------------------------- |
|
| ------------------- | ---------------- | ----------------------------- |
|
||||||
|
| `GITEA_TOKEN` | Gitea 访问令牌 | `${{ secrets.GITEA_TOKEN }}` |
|
||||||
| `APP_ENV` | 应用环境 | `production` |
|
| `APP_ENV` | 应用环境 | `production` |
|
||||||
| `SENTRY_AUTH_TOKEN` | Sentry 认证令牌 | `${{ secrets.SENTRY_TOKEN }}` |
|
| `SENTRY_AUTH_TOKEN` | Sentry 认证令牌 | `${{ secrets.SENTRY_TOKEN }}` |
|
||||||
| `SENTRY_DSN` | Sentry DSN 配置 | `${{ vars.SENTRY_DSN }}` |
|
| `SENTRY_DSN` | Sentry DSN 配置 | `${{ vars.SENTRY_DSN }}` |
|
||||||
@@ -109,12 +94,10 @@ Action 支持通过 `env` 传递**任意数量**的环境变量给发布命令
|
|||||||
|
|
||||||
## 输出参数
|
## 输出参数
|
||||||
|
|
||||||
| 参数名 | 描述 |
|
| 参数名 | 描述 |
|
||||||
| --------------------- | ------------------------ |
|
| ------------------- | ------------------------ |
|
||||||
| `version` | 发布的版本号 |
|
| `version` | 发布的版本号 |
|
||||||
| `version-with-dash` | 版本号(点号替换为横线) |
|
| `version-with-dash` | 版本号(点号替换为横线) |
|
||||||
| `docker-image-digest` | Docker 镜像摘要 |
|
|
||||||
| `docker-image-tags` | Docker 镜像标签列表 |
|
|
||||||
|
|
||||||
## 使用场景
|
## 使用场景
|
||||||
|
|
||||||
@@ -136,8 +119,8 @@ steps:
|
|||||||
|
|
||||||
- name: 发布项目
|
- name: 发布项目
|
||||||
uses: actions/xgj/release-web@main
|
uses: actions/xgj/release-web@main
|
||||||
with:
|
env:
|
||||||
gitea-token: ${{ secrets.GITEA_TOKEN }}
|
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
|
||||||
```
|
```
|
||||||
|
|
||||||
### 2. 完整 CI/CD 流程
|
### 2. 完整 CI/CD 流程
|
||||||
@@ -165,16 +148,12 @@ steps:
|
|||||||
- name: 发布构建
|
- name: 发布构建
|
||||||
id: release
|
id: release
|
||||||
uses: actions/xgj/release-web@main
|
uses: actions/xgj/release-web@main
|
||||||
with:
|
env:
|
||||||
gitea-token: ${{ secrets.GITEA_TOKEN }}
|
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
|
||||||
app-env: ${{ github.ref == 'refs/heads/main' && 'production' || 'staging' }}
|
APP_ENV: ${{ github.ref == 'refs/heads/main' && 'production' || 'staging' }}
|
||||||
sentry-auth-token: ${{ secrets.SENTRY_AUTH_TOKEN }}
|
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
|
||||||
sentry-dsn: ${{ vars.SENTRY_DSN }}
|
SENTRY_DSN: ${{ vars.SENTRY_DSN }}
|
||||||
enable-sentry: "true"
|
SENTRY_VITE: "true"
|
||||||
dockerfile-path: "./Dockerfile"
|
|
||||||
docker-tags: |
|
|
||||||
${{ github.sha }}
|
|
||||||
${{ github.ref_name }}
|
|
||||||
|
|
||||||
- name: 部署到Kubernetes
|
- name: 部署到Kubernetes
|
||||||
run: |
|
run: |
|
||||||
@@ -200,37 +179,31 @@ strategy:
|
|||||||
steps:
|
steps:
|
||||||
- name: 发布到 ${{ matrix.environment }}
|
- name: 发布到 ${{ matrix.environment }}
|
||||||
uses: actions/xgj/release-web@main
|
uses: actions/xgj/release-web@main
|
||||||
with:
|
env:
|
||||||
gitea-token: ${{ secrets.GITEA_TOKEN }}
|
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
|
||||||
app-env: ${{ matrix.app-env }}
|
APP_ENV: ${{ matrix.app_env }}
|
||||||
dockerfile-path: ${{ matrix.dockerfile }}
|
|
||||||
docker-tags: ${{ matrix.environment }}
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## 工作流程
|
## 工作流程
|
||||||
|
|
||||||
1. **参数验证**: 检查必需参数和文件是否存在
|
1. **发布构建**: 执行指定的发布命令进行版本发布
|
||||||
2. **发布构建**: 执行 `release-it` 命令进行版本发布
|
2. **获取版本**: 从 `/tmp/last-version` 读取新版本号
|
||||||
3. **获取版本**: 从 `/tmp/last-version` 读取新版本号
|
3. **发布总结**: 输出发布信息和结果
|
||||||
4. **准备标签**: 生成 Docker 镜像标签列表
|
|
||||||
5. **Docker 构建**: 构建并推送 Docker 镜像(可选)
|
|
||||||
6. **发布总结**: 输出发布信息和结果
|
|
||||||
|
|
||||||
## 依赖要求
|
## 依赖要求
|
||||||
|
|
||||||
### 项目要求
|
### 项目要求
|
||||||
|
|
||||||
- 包含 `package.json` 文件
|
- 包含 `package.json` 文件
|
||||||
- 配置了 `release-it` 工具
|
- 配置了发布工具(如 `release-it`)
|
||||||
- 包含发布脚本(如 `npm run release`)
|
- 包含发布脚本(如 `npm run release`)
|
||||||
- Docker 构建需要有效的 `Dockerfile`
|
- 发布命令能够生成版本文件到 `/tmp/last-version`
|
||||||
|
|
||||||
### 环境依赖
|
### 环境依赖
|
||||||
|
|
||||||
- Node.js 环境
|
- Node.js 环境
|
||||||
- npm/pnpm/yarn 包管理器
|
- npm/pnpm/yarn 包管理器
|
||||||
- Docker(如果启用 Docker 构建)
|
- 配置好的 Gitea 访问权限
|
||||||
- 配置好的 Docker 仓库访问权限
|
|
||||||
|
|
||||||
## 配置示例
|
## 配置示例
|
||||||
|
|
||||||
@@ -296,9 +269,9 @@ Action 会在以下情况报错并退出:
|
|||||||
|
|
||||||
### 常见问题
|
### 常见问题
|
||||||
|
|
||||||
**Q: 版本文件不存在错误**
|
### Q: 版本文件不存在错误
|
||||||
|
|
||||||
```
|
```bash
|
||||||
❌ 错误: 版本文件 /tmp/last-version 不存在
|
❌ 错误: 版本文件 /tmp/last-version 不存在
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -310,15 +283,7 @@ hooks: {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
**Q: Docker 构建失败**
|
### Q: Gitea Token 权限不足
|
||||||
|
|
||||||
A: 检查:
|
|
||||||
|
|
||||||
1. Dockerfile 路径是否正确
|
|
||||||
2. Docker 仓库是否已登录(使用 `actions/xgj/setup-env` action)
|
|
||||||
3. 构建上下文是否包含必需文件
|
|
||||||
|
|
||||||
**Q: Gitea Token 权限不足**
|
|
||||||
|
|
||||||
A: 确保 token 具有以下权限:
|
A: 确保 token 具有以下权限:
|
||||||
|
|
||||||
@@ -332,8 +297,9 @@ A: 确保 token 具有以下权限:
|
|||||||
```yaml
|
```yaml
|
||||||
- uses: actions/xgj/release-web@main
|
- uses: actions/xgj/release-web@main
|
||||||
with:
|
with:
|
||||||
gitea-token: ${{ secrets.GITEA_TOKEN }}
|
|
||||||
node-debug: "true"
|
node-debug: "true"
|
||||||
|
env:
|
||||||
|
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
|
||||||
```
|
```
|
||||||
|
|
||||||
## 更新日志
|
## 更新日志
|
||||||
|
@@ -7,18 +7,8 @@ branding:
|
|||||||
color: 'green'
|
color: 'green'
|
||||||
|
|
||||||
inputs:
|
inputs:
|
||||||
gitea-token:
|
|
||||||
description: 'Gitea访问令牌'
|
|
||||||
required: true
|
|
||||||
|
|
||||||
app-env:
|
|
||||||
description: '应用环境 (development, production等)'
|
|
||||||
required: false
|
|
||||||
default: 'production'
|
|
||||||
|
|
||||||
|
|
||||||
release-command:
|
release-command:
|
||||||
description: '发布命令,默认为 npm run release -- --release -V'
|
description: '发布命令,例如 npm run release -- --release -V'
|
||||||
required: false
|
required: false
|
||||||
default: 'npm run release -- --release -V'
|
default: 'npm run release -- --release -V'
|
||||||
|
|
||||||
@@ -39,18 +29,6 @@ outputs:
|
|||||||
runs:
|
runs:
|
||||||
using: 'composite'
|
using: 'composite'
|
||||||
steps:
|
steps:
|
||||||
- name: 验证必需参数
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
echo "🔍 验证输入参数..."
|
|
||||||
|
|
||||||
if [[ -z "${{ inputs.gitea-token }}" ]]; then
|
|
||||||
echo "❌ 错误: gitea-token 参数是必需的"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "✅ 参数验证通过"
|
|
||||||
|
|
||||||
- name: 发布构建
|
- name: 发布构建
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
@@ -60,8 +38,6 @@ runs:
|
|||||||
echo "✅ 发布构建完成"
|
echo "✅ 发布构建完成"
|
||||||
env:
|
env:
|
||||||
NODE_DEBUG: ${{ inputs.node-debug == 'true' && 'release-it:*' || '' }}
|
NODE_DEBUG: ${{ inputs.node-debug == 'true' && 'release-it:*' || '' }}
|
||||||
GITEA_TOKEN: ${{ inputs.gitea-token }}
|
|
||||||
APP_ENV: ${{ inputs.app-env }}
|
|
||||||
|
|
||||||
- name: 获取版本信息
|
- name: 获取版本信息
|
||||||
id: get_var
|
id: get_var
|
||||||
@@ -91,4 +67,3 @@ runs:
|
|||||||
echo ""
|
echo ""
|
||||||
echo "📋 发布信息:"
|
echo "📋 发布信息:"
|
||||||
echo " - 版本号: ${{ steps.get_var.outputs.version }}"
|
echo " - 版本号: ${{ steps.get_var.outputs.version }}"
|
||||||
echo " - 应用环境: ${{ inputs.app-env }}"
|
|
||||||
|
@@ -32,9 +32,8 @@ jobs:
|
|||||||
- name: 发布构建
|
- name: 发布构建
|
||||||
id: release
|
id: release
|
||||||
uses: actions/xgj/release-web@main
|
uses: actions/xgj/release-web@main
|
||||||
with:
|
env:
|
||||||
gitea-token: ${{ secrets.GITEA_TOKEN }}
|
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
|
||||||
app-env: "production"
|
|
||||||
|
|
||||||
- name: 发布结果
|
- name: 发布结果
|
||||||
run: |
|
run: |
|
||||||
|
@@ -32,10 +32,9 @@ jobs:
|
|||||||
- name: 发布构建(环境变量配置)
|
- name: 发布构建(环境变量配置)
|
||||||
id: release
|
id: release
|
||||||
uses: actions/xgj/release-web@main
|
uses: actions/xgj/release-web@main
|
||||||
with:
|
|
||||||
gitea-token: ${{ secrets.GITEA_TOKEN }}
|
|
||||||
env:
|
env:
|
||||||
# 🌍 任意数量的环境变量都会自动传递给 release-it 命令
|
# 🌍 任意数量的环境变量都会自动传递给发布命令
|
||||||
|
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
|
||||||
APP_ENV: "production"
|
APP_ENV: "production"
|
||||||
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
|
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
|
||||||
SENTRY_DSN: ${{ vars.SENTRY_DSN }}
|
SENTRY_DSN: ${{ vars.SENTRY_DSN }}
|
||||||
@@ -56,10 +55,9 @@ jobs:
|
|||||||
|
|
||||||
- name: 多环境配置示例
|
- name: 多环境配置示例
|
||||||
uses: actions/xgj/release-web@main
|
uses: actions/xgj/release-web@main
|
||||||
with:
|
|
||||||
gitea-token: ${{ secrets.GITEA_TOKEN }}
|
|
||||||
env:
|
env:
|
||||||
# 🎯 根据分支设置不同的环境变量
|
# 🎯 根据分支设置不同的环境变量
|
||||||
|
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
|
||||||
APP_ENV: ${{ github.ref == 'refs/heads/main' && 'production' || 'staging' }}
|
APP_ENV: ${{ github.ref == 'refs/heads/main' && 'production' || 'staging' }}
|
||||||
SENTRY_VITE: ${{ github.ref == 'refs/heads/main' && 'true' || 'false' }}
|
SENTRY_VITE: ${{ github.ref == 'refs/heads/main' && 'true' || 'false' }}
|
||||||
|
|
||||||
|
@@ -72,9 +72,9 @@ jobs:
|
|||||||
- name: 发布构建
|
- name: 发布构建
|
||||||
id: release
|
id: release
|
||||||
uses: actions/xgj/release-web@main
|
uses: actions/xgj/release-web@main
|
||||||
with:
|
env:
|
||||||
gitea-token: ${{ secrets.GITEA_TOKEN }}
|
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
|
||||||
app-env: ${{ github.ref == 'refs/heads/main' && 'production' || 'develop' }}
|
APP_ENV: ${{ github.ref == 'refs/heads/main' && 'production' || 'develop' }}
|
||||||
|
|
||||||
- name: 通知发布结果
|
- name: 通知发布结果
|
||||||
run: |
|
run: |
|
||||||
|
@@ -65,9 +65,10 @@ jobs:
|
|||||||
id: release
|
id: release
|
||||||
uses: actions/xgj/release-web@main
|
uses: actions/xgj/release-web@main
|
||||||
with:
|
with:
|
||||||
gitea-token: ${{ secrets.GITEA_TOKEN }}
|
|
||||||
app-env: ${{ matrix.app_env }}
|
|
||||||
release-command: "npm run release -- --release -V --increment ${{ github.event.inputs.version_type }}"
|
release-command: "npm run release -- --release -V --increment ${{ github.event.inputs.version_type }}"
|
||||||
|
env:
|
||||||
|
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
|
||||||
|
APP_ENV: ${{ matrix.app_env }}
|
||||||
|
|
||||||
- name: 部署应用
|
- name: 部署应用
|
||||||
run: |
|
run: |
|
||||||
|
Reference in New Issue
Block a user