如何通过设置仅允许受保护分支运行GitHub Actions?
如何无需修改工作流文件限制GitHub Actions仅在受保护分支运行
核心解决方案:用仓库级设置替代工作流内的if条件
因为开发者能修改分支内的工作流文件,所以必须通过管理员可控的仓库设置来限制Actions的运行范围,以下是几种靠谱的实现方式:
1. 利用仓库规则集(Repository Rulesets)限制分支Actions运行
这是最直接的方式,管理员可以给非受保护分支设置禁止Actions的规则:
- 进入仓库「Settings」→「Code and automation」→「Rulesets」
- 创建新规则集,选择应用到「所有分支」,然后排除受保护的
main分支 - 在规则里添加「Actions restrictions」,选择「Block all actions」
- 保存规则后,除了
main分支,其他分支的所有Actions都会被自动阻止,开发者没法通过修改工作流绕过
2. 用环境(Environments)锁定部署权限
如果只是要防止绕过PR直接部署,而非完全禁用其他分支的Actions,可以通过环境保护来限制部署步骤:
- 进入仓库「Settings」→「Code and automation」→「Environments」,创建生产环境(比如
production) - 在环境设置里开启「Deployment branches」,指定仅允许
main分支部署到该环境;同时可以开启「Required reviewers」增加审核环节 - 修改核心工作流,把部署步骤绑定到这个环境(工作流文件要放在
main分支并设置保护,禁止开发者修改):
jobs: deploy: runs-on: ubuntu-latest environment: production # 绑定到受保护环境 steps: - uses: actions/checkout@v4 # 后续部署步骤
这样即使开发者在自己分支运行工作流,部署步骤会因为不符合环境的分支限制而被拦截,且环境设置由管理员掌控。
3. 限制可运行的工作流来源
通过限制仅允许仓库内受保护分支的工作流运行,彻底杜绝开发者自定义工作流的滥用:
- 进入仓库「Settings」→「Actions」→「General」
- 找到「Allowed actions and reusable workflows」,选择「Allow select actions and reusable workflows」
- 添加仓库内的工作流路径路径,比如指定仅允许
main分支下的.github/workflows/**工作流 - 同时禁用「Allow actions created by GitHub Marketplace authors」等不必要的选项,进一步缩小范围
配套的防护措施
- 给
main分支设置严格的分支保护规则:禁止直接推送,要求所有变更必须通过PR合并,且PR需要至少1个审核通过 - 给
.github/workflows/目录设置单独的分支保护规则,禁止开发者直接修改核心工作流文件,必须经过管理员审核
内容的提问来源于stack exchange,提问作者Ysak
相关产品推荐
相关产品推荐

