mirror of
https://git.bjxgj.com/xgj/xgj-actions.git
synced 2025-10-14 06:33:37 +08:00
120 lines
4.0 KiB
YAML
120 lines
4.0 KiB
YAML
# 条件部署示例
|
||
# 这个示例展示了如何根据触发方式进行条件部署
|
||
|
||
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 }} 已成功部署到生产环境"
|