Files
xgj/trigger-version/README.md

205 lines
6.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Trigger Version Info Action
这个 GitHub Action 用于检测工作流的触发方式并提取版本信息,支持标签触发、版本分支触发和常规分支触发。
## 功能特性
- 🏷️ **标签触发检测**:自动识别版本标签(如 `v1.2.3`)并提取版本号
- 🔄 **版本分支检测**:识别版本分支(如 `v1.2.x`)并提取版本信息
- 🆕 **常规分支处理**:对于非版本分支提供基础信息
- 🎯 **灵活的版本前缀**:支持自定义版本前缀(默认为 `v`
- 🔧 **版本格式转换**:自动生成横线格式的版本号(如 `v1.2.3``v1-2-3`
- 📤 **环境变量输出**:自动设置环境变量供后续步骤使用
- 📊 **详细的输出信息**:提供完整的引用信息和触发状态
## 输入参数
| 参数名 | 描述 | 必需 | 默认值 |
| ---------------- | -------------------------------- | ---- | ------ |
| `version-prefix` | 版本前缀,用于匹配版本标签或分支 | 否 | `v` |
## 输出参数
| 参数名 | 描述 | 示例值 |
| -------------------- | ------------------------ | ------------------------------- |
| `ref-type` | 引用类型 | `tag``branch` |
| `ref-name` | 引用名称 | `v1.2.3``main``feature/xxx` |
| `is-version-trigger` | 是否为版本触发 | `true``false` |
| `trigger-version` | 触发的版本号(去除前缀) | `1.2.3` |
| `version-with-dash` | 版本号,点替换为横线 | `1-2-3` |
| `trigger-source` | 触发源 | `tag``branch` |
| `full-ref` | 完整的 Git 引用 | `refs/tags/v1.2.3` |
## 环境变量
Action 会自动设置以下环境变量:
- `IS_VERSION_TRIGGER`: 是否为版本触发true/false
- `TRIGGER_VERSION`: 触发的版本号
- `VERSION_WITH_DASH`: 版本号,点替换为横线
- `TRIGGER_SOURCE`: 触发源tag/branch
## 使用示例
### 基本用法
```yaml
name: Build and Deploy
on:
push:
branches: ["main", "v*"]
tags: ["v*"]
jobs:
get-version-info:
runs-on: ubuntu-latest
outputs:
is-version-trigger: ${{ steps.version-info.outputs.is-version-trigger }}
trigger-version: ${{ steps.version-info.outputs.trigger-version }}
version-with-dash: ${{ steps.version-info.outputs.version-with-dash }}
trigger-source: ${{ steps.version-info.outputs.trigger-source }}
steps:
- name: 获取版本信息
id: version-info
uses: actions/xgj/trigger-version@v1
- name: 显示版本信息
run: |
echo "是否版本触发: ${{ steps.version-info.outputs.is-version-trigger }}"
echo "版本号: ${{ steps.version-info.outputs.trigger-version }}"
echo "横线版本号: ${{ steps.version-info.outputs.version-with-dash }}"
echo "触发源: ${{ steps.version-info.outputs.trigger-source }}"
deploy:
needs: get-version-info
runs-on: ubuntu-latest
if: needs.get-version-info.outputs.is-version-trigger == 'true'
steps:
- name: 部署版本
run: |
echo "部署版本: ${{ needs.get-version-info.outputs.trigger-version }}"
echo "Docker标签: myapp:${{ needs.get-version-info.outputs.version-with-dash }}"
```
### 自定义版本前缀
```yaml
- name: 获取版本信息(自定义前缀)
id: version-info
uses: actions/xgj/trigger-version@v1
with:
version-prefix: "release-"
```
### 完整的 CI/CD 流程
```yaml
name: Complete CI/CD
on:
push:
branches: ["main", "develop", "v*"]
tags: ["v*"]
jobs:
analyze:
runs-on: ubuntu-latest
outputs:
is-version-trigger: ${{ steps.version-info.outputs.is-version-trigger }}
trigger-version: ${{ steps.version-info.outputs.trigger-version }}
should-deploy: ${{ steps.check-deploy.outputs.should-deploy }}
steps:
- name: 获取版本信息
id: version-info
uses: actions/xgj/trigger-version@v1
- name: 检查是否需要部署
id: check-deploy
run: |
if [[ "${{ steps.version-info.outputs.is-version-trigger }}" == "true" ]]; then
echo "should-deploy=true" >> $GITHUB_OUTPUT
elif [[ "${{ steps.version-info.outputs.ref-name }}" == "main" ]]; then
echo "should-deploy=true" >> $GITHUB_OUTPUT
else
echo "should-deploy=false" >> $GITHUB_OUTPUT
fi
build:
needs: analyze
runs-on: ubuntu-latest
steps:
- name: 构建应用
run: |
echo "构建中..."
# 你的构建逻辑
deploy-staging:
needs: [analyze, build]
runs-on: ubuntu-latest
if: needs.analyze.outputs.should-deploy == 'true' && needs.analyze.outputs.is-version-trigger == 'false'
steps:
- name: 部署到测试环境
run: echo "部署到测试环境"
deploy-production:
needs: [analyze, build]
runs-on: ubuntu-latest
if: needs.analyze.outputs.is-version-trigger == 'true'
steps:
- name: 部署到生产环境
run: |
echo "部署版本 ${{ needs.analyze.outputs.trigger-version }} 到生产环境"
```
## 触发场景
### 标签触发
当推送版本标签时(如 `v1.2.3`
- `is-version-trigger`: `true`
- `trigger-version`: `1.2.3`
- `version-with-dash`: `v1-2-3`
- `trigger-source`: `tag`
### 版本分支触发
当推送到版本分支时(如 `v1.2.x`
- `is-version-trigger`: `true`
- `trigger-version`: `1.2.x`
- `version-with-dash`: `v1-2-x`
- `trigger-source`: `branch`
### 常规分支触发
当推送到普通分支时(如 `main``feature/xxx`
- `is-version-trigger`: `false`
- `trigger-version`: `""`
- `version-with-dash`: `""`
- `trigger-source`: `branch`
## 最佳实践
1. **条件部署**:使用 `is-version-trigger` 来决定是否执行生产部署
2. **版本标记**:在构建产物中使用 `trigger-version` 进行版本标记
3. **Docker 标签**:使用 `version-with-dash` 作为 Docker 镜像标签(避免点号问题)
4. **环境区分**:根据触发源选择不同的部署环境
5. **日志记录**:记录详细的版本信息用于追踪和调试
## 注意事项
- 版本前缀区分大小写
- 空的版本号会被设置为空字符串
- 确保工作流触发条件与你的版本策略一致
- 在使用输出参数时注意布尔值的字符串比较(使用 `== 'true'`
## 故障排除
如果 Action 没有按预期工作:
1. 检查触发条件是否正确设置
2. 确认版本前缀配置是否正确
3. 查看 Action 日志中的调试信息
4. 验证 Git 引用格式是否符合预期