如何为prod、dev分支分别配置Self Hosted Runner实现GitHub Actions自动部署
不同分支绑定独立Self Hosted Runner实现方案
1. 为两个自托管Runner配置专属自定义标签
标签是绑定Workflow和Runner的核心标识,你可以任选部署时配置或GitHub后台配置两种方式:
- 部署新Runner时直接指定标签
运行配置命令时新增--labels参数传入自定义标签即可,示例如下:# 给dev环境的Runner配置专属标签 ./config.sh --url <你的GitHub仓库地址> --token <Runner注册token> --labels dev-deploy-runner # 给prod环境的Runner配置专属标签 ./config.sh --url <你的GitHub仓库地址> --token <Runner注册token> --labels prod-deploy-runner - 已部署完成的Runner可直接在后台修改标签
进入对应GitHub仓库的「Settings」→「Actions」→「Runners」页面,点击目标Runner进入详情页,在Labels模块直接添加/修改对应专属标签即可。
2. 修改对应分支的Workflow配置指定Runner
分别修改dev、prod分支的GitHub Actions YAML配置,将runs-on字段指定为对应Runner的标签组合即可:
# dev分支的配置文件示例 name: Dev环境自动部署 on: push: branches: [ dev ] # 仅触发dev分支推送 jobs: deploy-to-dev: # 这里指定匹配自托管+dev专属标签的Runner runs-on: [self-hosted, dev-deploy-runner] steps: # 你原有部署逻辑保持不变 - uses: actions/checkout@v4 # ... 其余部署步骤
prod分支的配置仅需要把runs-on中的标签替换为prod-deploy-runner,同时触发分支改为prod即可。
3. 可选校验配置
你可以在Workflow中新增校验步骤,避免标签配置错误导致的跨环境部署问题:
steps: - name: 校验Runner与分支匹配关系 run: | if [[ "${{ github.ref }}" == "refs/heads/dev" && ! "${{ runner.labels }}" =~ "dev-deploy-runner" ]]; then echo "错误:dev分支不能使用非dev环境Runner" exit 1 fi if [[ "${{ github.ref }}" == "refs/heads/prod" && ! "${{ runner.labels }}" =~ "prod-deploy-runner" ]]; then echo "错误:prod分支不能使用非prod环境Runner" exit 1 fi
内容的提问来源于stack exchange,提问作者alirasheed
相关产品推荐
相关产品推荐

