# 条件部署示例 # 这个示例展示了如何根据触发方式进行条件部署 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 }} version-with-dash: ${{ steps.version-info.outputs.version-with-dash }} 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 "🐳 Docker标签: myapp:${{ needs.analyze.outputs.version-with-dash }}" echo "触发源: ${{ needs.analyze.outputs.trigger-source }}" # 生产部署逻辑 # docker build -t myapp:${{ needs.analyze.outputs.version-with-dash }} . # docker push myapp:${{ needs.analyze.outputs.version-with-dash }} 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 }} 已成功部署到生产环境"