GitHub Actions environments怎样给部署环境设置审批门槛
来源:17golang原创
时间:2026-11-04 11:41:40 309浏览 收藏
如果生产部署不能由每次提交自动直达,GitHub Actions 的 environments 可以把“是否允许继续”交给指定人员确认。做法是创建一个名为 production 的环境,打开 Required reviewers,再让部署 job 引用这个环境。运行到该 job 时,页面会显示 Waiting,审查者可以选择批准或拒绝。
官方地址:https://docs.github.com/en/actions/how-tos/deploy/configure-and-manage-deployments/control-deployments
下面按 GitHub 网页中的入口顺序说明。文中的界面图是原创操作示意图,不是 GitHub 实际截图;workflow 片段用于展示配置关系,不代表已经在本机运行。
先确定审批应该卡在哪个 job
环境审批保护的是“引用该环境的 job”,不是整个 workflow 文件。通常把它放在构建和测试完成之后的部署 job 上:前面的检查先跑完,真正会接触生产资源的 job 再等待人工决定。
例如,build 负责准备产物,deploy-production 负责发布。只有后者写上 environment: production,production 环境的保护规则才会介入。环境规则通过前,环境中保存的 secrets 也不会提供给该 job。
创建 production 环境并打开保护规则
- 打开目标仓库,进入
Settings。 - 在左侧找到
Environments,选择New environment。 - 输入环境名
production并创建。 - 在该环境的
Environment protection rules区域找到Required reviewers。 - 添加负责审核发布的用户或团队;如果不希望发起者批准自己的部署,同时打开
Prevent self-review。 - 点击
Save protection rules保存。

继续条件:环境名称是 production,审查者已经出现在规则列表中,并且保存按钮完成了设置。不要把个人令牌、云平台密钥或真实仓库信息放进说明图或示例文件。
Required reviewers 应该怎样选择
审查者可以是用户或团队,配置时优先选择真正能判断发布风险的人。一个团队多人时,流程重点是“由被列出的审查者完成确认”,而不是让所有成员逐个点击。GitHub 文档还说明,必需审查者规则最多可列出六个用户或团队,审查者至少需要对仓库有读取权限。
Prevent self-review 适合把提交者和审批者分开:发布由甲发起,乙确认后继续。若团队明确允许同一人自查自发,可以不打开它,但这会削弱审批门槛的独立性。
环境还可以配置分支限制、等待计时器或其它部署保护规则。本文只讨论人工审查;不要把等待计时器误认为审查,它只会延迟作业,并不会替代某个具体人员的批准。
让部署 job 引用 production 环境
环境创建好之后,workflow 需要在部署 job 上写出同名的 environment。名称必须与网页里创建的环境完全一致,大小写和空格也要保持一致。
name: deploy
on:
push:
branches: [main] # 只让主分支的变更进入这个示例流程
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4 # 拉取仓库内容,供后续构建使用
- name: 构建发布产物
run: npm run build # 示例命令,替换成项目自己的构建命令
deploy-production:
needs: build # 构建成功后才进入部署 job
runs-on: ubuntu-latest
environment:
name: production # 绑定网页中创建的受保护环境
steps:
- name: 发布到生产环境
run: ./scripts/deploy.sh # 审批通过后才会执行发布动作
这里的关键不是 name 字段本身,而是 job 级别的 environment.name。当 deploy-production 走到环境规则时,作业会暂停;审批通过后才继续执行后面的发布步骤,并按环境规则提供相应 secrets。
在 Actions 运行页找到 Waiting 状态
- 打开仓库的
Actions,进入刚刚触发的 workflow run。 - 找到
deploy-productionjob;如果它已到达受保护环境,状态会显示为Waiting或待处理。 - 在部署保护区域点击
Review deployments。 - 选中
production,阅读本次变更说明或关联的检查结果。 - 确认发布时点击
Approve and deploy;不允许发布时点击Reject。

批准后,job 才会继续执行部署步骤;拒绝则会使这次 workflow 失败。若环境开启了禁止自审,发起该 workflow 的用户即使出现在审查者列表里,也不能批准自己的部署。
审批门槛不生效时先查这五项
| 现象 | 优先检查 | 处理方向 |
|---|---|---|
| job 直接运行,没有 Waiting | job 是否引用了环境 | 确认写的是 job 级别 environment: production,并且名称与设置页一致。 |
| 看不到 Required reviewers | 仓库可见性与计划 | GitHub 文档对私有或内部仓库的环境能力有计划要求;按当前账户计划和仓库类型检查可用范围。 |
| 审查者无法批准 | 读取权限或禁止自审 | 确认审查者至少有仓库读取权限;如果是发起者本人,检查是否打开了 Prevent self-review。 |
| 批准后仍没有发布 | 其它保护规则与 job 依赖 | 检查等待计时器、其它部署保护规则,以及 needs 依赖是否仍未满足。 |
| 环境 secrets 为空 | 规则是否已经通过 | 环境 secrets 要在保护规则通过后才对关联 job 可用,不要在审批前假定它们已经注入。 |
一份可以保存的配置清单
- 网页设置:存在
production环境,并已保存Required reviewers。 - workflow 绑定:部署 job 使用
environment.name: production,不是只在 workflow 名称里写 production。 - 审批职责:审查者有读取权限,且团队已决定是否禁止发起者自审。
- 运行验收:Actions 页面能看到
Waiting、Review deployments,批准后 job 才进入发布步骤。 - 边界意识:等待计时器、分支限制和自定义保护规则是不同机制,不能用其中一个的表现推断另一个已经生效。
如果你的目标只是把生产密钥集中管理,环境也可以承担配置组织和访问控制;如果目标是“每次生产发布必须有人点确认”,则至少要同时完成 Required reviewers 设置和部署 job 的环境绑定。
相关问题
Required reviewers 是给整个 workflow 加审批吗?
不是。它作用于引用该环境的 job。把环境绑定到生产部署 job,通常比把所有检查都放进一个受保护 job 更容易看清审批发生在哪个阶段。
一个审查者团队需要所有人都批准吗?
审批配置的重点是列出允许审查的用户或团队;实际采用哪种团队内部批准规则,还要结合组织权限和发布制度。文章中的界面示意只表示配置入口,不替团队制定内部流程。
为什么批准后环境 secrets 才能使用?
这是环境保护的安全边界。关联 job 在规则通过前不能访问该环境的 secrets,避免未经人工确认的工作流先拿到生产凭据。
-
501 收藏
-
501 收藏
-
501 收藏
-
501 收藏
-
501 收藏
-
326 收藏
-
145 收藏
-
227 收藏
-
488 收藏
-
文章 · 软件教程 | 57分钟前 | 开发环境 · vs code · 软件教程 · VS Code Dev Containers workspaceFolder workspaceMount Docker 挂载477 收藏
-
449 收藏
-
501 收藏
-
271 收藏
-
206 收藏
-
316 收藏
-
484 收藏
-
240 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 485次学习