Files
xgj/trigger-version/examples/conditional-deployment.yml

120 lines
4.1 KiB
YAML
Raw 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.

# 条件部署示例
# 这个示例展示了如何根据触发方式进行条件部署
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: actions/xgj/trigger-version@v1
- 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 }} 已成功部署到生产环境"