feat: 添加触发版本信息的 GitHub Action,支持标签、版本分支和常规分支触发,提供详细的输出信息和环境变量,更新文档以反映新功能和使用示例。

This commit is contained in:
Lyda
2025-08-20 20:38:33 +08:00
parent e4063690cd
commit 84f608690b
6 changed files with 887 additions and 0 deletions

View File

@@ -0,0 +1,119 @@
# 条件部署示例
# 这个示例展示了如何根据触发方式进行条件部署
name: Conditional Deployment
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 }}
trigger-source: ${{ steps.version-info.outputs.trigger-source }}
ref-name: ${{ steps.version-info.outputs.ref-name }}
deploy-staging: ${{ steps.deployment-strategy.outputs.deploy-staging }}
deploy-production: ${{ steps.deployment-strategy.outputs.deploy-production }}
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: 获取版本信息
id: version-info
uses: ./trigger-version
- name: 确定部署策略
id: deployment-strategy
run: |
IS_VERSION="${{ steps.version-info.outputs.is-version-trigger }}"
REF_NAME="${{ steps.version-info.outputs.ref-name }}"
echo "分析部署策略..."
# 生产环境部署条件:版本标签触发
if [[ "$IS_VERSION" == "true" && "${{ steps.version-info.outputs.trigger-source }}" == "tag" ]]; then
echo "deploy-production=true" >> $GITHUB_OUTPUT
echo "deploy-staging=false" >> $GITHUB_OUTPUT
echo "🚀 将部署到生产环境"
# 测试环境部署条件main分支或版本分支
elif [[ "$REF_NAME" == "main" || "$IS_VERSION" == "true" ]]; then
echo "deploy-production=false" >> $GITHUB_OUTPUT
echo "deploy-staging=true" >> $GITHUB_OUTPUT
echo "🧪 将部署到测试环境"
else
echo "deploy-production=false" >> $GITHUB_OUTPUT
echo "deploy-staging=false" >> $GITHUB_OUTPUT
echo "⏭️ 跳过部署"
fi
build:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: 构建应用
run: |
echo "🔨 构建应用中..."
# 模拟构建过程
sleep 2
echo "✅ 构建完成"
- name: 运行测试
run: |
echo "🧪 运行测试中..."
# 模拟测试过程
sleep 1
echo "✅ 测试通过"
deploy-staging:
needs: [analyze, build]
runs-on: ubuntu-latest
if: needs.analyze.outputs.deploy-staging == 'true'
environment: staging
steps:
- name: 部署到测试环境
run: |
echo "🚀 部署到测试环境"
echo "分支/版本: ${{ needs.analyze.outputs.ref-name }}"
if [[ "${{ needs.analyze.outputs.is-version-trigger }}" == "true" ]]; then
echo "版本号: ${{ needs.analyze.outputs.trigger-version }}"
fi
echo "✅ 测试环境部署完成"
- name: 发送通知
run: |
echo "📢 发送测试环境部署通知"
# 这里可以集成 Slack、钉钉等通知
deploy-production:
needs: [analyze, build]
runs-on: ubuntu-latest
if: needs.analyze.outputs.deploy-production == 'true'
environment: production
steps:
- name: 部署到生产环境
run: |
echo "🚀 部署版本 ${{ needs.analyze.outputs.trigger-version }} 到生产环境"
echo "触发源: ${{ needs.analyze.outputs.trigger-source }}"
# 生产部署逻辑
echo "✅ 生产环境部署完成"
- name: 创建 Release
if: needs.analyze.outputs.trigger-source == 'tag'
run: |
echo "📦 创建 GitHub Release"
echo "版本: v${{ needs.analyze.outputs.trigger-version }}"
# 这里可以使用 gh CLI 创建 release
- name: 发送生产部署通知
run: |
echo "📢 发送生产环境部署通知"
echo "🎉 版本 ${{ needs.analyze.outputs.trigger-version }} 已成功部署到生产环境"