GitHub Environments推送标签部署Staging环境失败求助
多环境部署失败的yaml修正方案
核心问题排查
你遇到的环境保护规则失败,大概率是工作流触发条件和环境规则不匹配导致的——要么是Staging部署被分支推送错误触发,要么是标签匹配逻辑写得不对,触发了环境的分支/标签校验限制。
直接修改你的ci.yml,重点改这几个地方:
1. 精准区分触发源
把触发事件拆清楚,确保main分支推送只触发Dev,r开头标签推送只触发Staging:
on: push: branches: - main # 仅main分支推送/合并触发 tags: - 'r*' # 仅r开头的标签推送触发
2. 给每个部署作业加精准判断
避免两种触发源交叉触发错误环境的部署,给jobs加if条件:
jobs: deploy-dev: # 只有触发源是main分支时才执行这个作业 if: github.ref == 'refs/heads/main' runs-on: ubuntu-latest environment: Dev steps: - uses: actions/checkout@v4 - name: Deploy to Dev run: | # 替换成你的实际部署命令,比如terraform apply -var-file=dev.tfvars echo "Deploying infrastructure to Dev environment" deploy-staging: # 只有触发源是r开头的标签时才执行这个作业 if: startsWith(github.ref, 'refs/tags/r') runs-on: ubuntu-latest environment: Staging steps: - uses: actions/checkout@v4 - name: Deploy to Staging run: | # 替换成你的实际部署命令,比如terraform apply -var-file=staging.tfvars echo "Deploying infrastructure to Staging environment"
3. 关键修改说明
- 触发事件里同时声明
branches和tags,确保两种场景都能被正确捕获 - 作业级的
if判断是核心:彻底杜绝main分支推送触发Staging部署,也避免标签推送触发Dev部署,完全贴合你的需求 - 标签匹配用
'r*'通配符,配合startsWith函数双重校验,确保只有r开头的标签能触发Staging
最后和环境规则适配
检查你的Staging环境保护规则:
- 如果规则设置了「仅允许特定标签部署」,确保标签前缀是
r*,和yaml里的匹配逻辑一致 - 不要给Staging环境设置分支限制,因为你是用标签触发的,分支限制会导致标签推送时校验失败
内容的提问来源于stack exchange,提问作者cloudlearner
相关产品推荐
相关产品推荐

