当前位置:首页 > 文章列表 > 文章 > 软件教程 > GitHub Actions 如何用环境保护规则控制部署审批

GitHub Actions 如何用环境保护规则控制部署审批

来源:17golang原创 2026-10-09 22:27:41 0浏览 收藏

GitHub Actions 的生产部署审批不需要把“等待人工确认”写成一个脚本步骤。更稳妥的做法是:先给仓库创建 production 环境,在环境上设置必须审批人、禁止自批与可部署分支,然后让部署 job 通过 environment 引用它。这样保护规则没有通过时,job 不会被发送到 runner,也不能读取该环境里的密钥。

官方操作说明可从下面两个地址核对:

# 环境创建与保护规则
https://docs.github.com/en/actions/how-tos/deploy/configure-and-manage-deployments/manage-environments

# 审批或拒绝等待中的部署
https://docs.github.com/en/actions/how-tos/deploy/configure-and-manage-deployments/review-deployments

先确认功能范围:公有仓库在当前 GitHub 计划中普遍可使用环境、环境密钥和部署保护规则;私有或内部仓库需要相应付费计划,而 Required reviewers、Wait timer 等规则的可用性还会受到计划与仓库可见性影响。若界面中没有本文选项,应先查看官方页面的 “Who can use this feature”,不要用脚本绕过。

一、审批门禁实际控制什么

环境保护规则作用在“引用环境的 job”上,而不是作用在整个工作流文件上。假设工作流先构建、再部署,只有 deploy job 写了 environment: production,那么构建可以正常完成,部署会在保护规则处暂停。审批通过后,部署 job 才获得以下条件:

  • 进入 runner 队列并开始执行步骤;
  • 读取 production 环境中保存的 secrets;
  • 创建与该环境关联的 deployment 和 deployment status。

这个边界很重要:只在工作流名称、job 名称或脚本参数里写“production”不会自动触发审批,必须使用 job 级 environment 字段。

二、步骤一:创建 production 环境

  1. 进入目标仓库主页,点击仓库顶部的 Settings。看不到 Settings 时,可先展开仓库导航的下拉菜单。
  2. 在左侧栏点击 Environments。
  3. 点击 New environment。
  4. 名称输入 production,点击 Configure environment。
原创代码托管平台界面中从 Settings 进入 Environments 并创建 production 环境
图1:从仓库设置创建 production 环境的原创操作示意图。

环境名称不区分大小写,但工作流中的名称最好与界面保持完全一致,减少排查时的歧义。不要依赖“运行时自动创建环境”:官方说明指出,工作流引用一个不存在的环境时可能自动创建它,但这个新环境通常没有保护规则和密钥,不能替代管理员预先配置。

三、步骤二:设置必须审批与禁止自批

在 production 的配置页找到 Deployment protection rules,按下面顺序操作:

  1. 勾选 Required reviewers。
  2. 搜索并加入负责发布的用户或团队,例如 release-managers。
  3. 勾选 Prevent self-review,避免工作流触发者审批自己的部署。
  4. 点击 Save protection rules。
原创环境配置界面中设置 Required reviewers、Prevent self-review 与保存保护规则
图2:配置必须审批人与禁止自批的原创界面示意图。

当前官方规则允许最多加入 6 个用户或团队,只要其中一名 required reviewer 批准,审批条件就通过。因此,“加入两组 reviewer”并不等于必须双人会签。如果你的制度要求两人分别确认,需要通过组织流程或自定义部署保护规则另行实现,不能把默认 Required reviewers 误解成多签。

页面若提供 Wait timer,还可以设置批准前必须等待的分钟数;如果希望管理员也不能越过保护规则,可取消 Allow administrators to bypass configured protection rules。这两项是否出现同样取决于计划与仓库类型。

四、步骤三:限制允许部署的分支或标签

审批解决“谁允许部署”,分支规则解决“哪段代码允许部署”。仍在 production 环境页,找到 Deployment branches and tags:

  1. 在下拉框选择 Selected branches and tags。
  2. 点击 Add deployment branch or tag rule。
  3. Ref type 选择 Branch,名称模式输入 main。
  4. 点击 Add rule。
原创环境规则界面中把 Deployment branches and tags 限定为 main 分支
图3:只允许 main 分支部署到 production 的原创操作示意图。

分支与标签规则必须分别创建。若团队通过版本标签发版,可以再添加 Ref type 为 Tag 的规则,例如 v*;不要只写一个看似同时匹配分支与标签的模式。

五、步骤四:让 deploy job 引用 production

把部署工作流放在仓库的 .github/workflows 目录。下面示例使用手动触发,重点是 deploy job 的 environment 字段:

name: deploy-production

on:
  workflow_dispatch:

jobs:
  deploy:
    runs-on: ubuntu-latest
    # 名称必须对应 Settings > Environments 中的 production
    environment:
      name: production
    steps:
      - name: Checkout source
        uses: actions/checkout@v4

      - name: Deploy
        # 示例命令仅表示部署入口,请替换为项目自己的安全脚本
        run: ./scripts/deploy.sh

如果只需要环境名称,也可以简写为:

jobs:
  deploy:
    runs-on: ubuntu-latest
    # 简写与 environment.name: production 等价
    environment: production
    steps:
      - name: Deploy
        run: ./scripts/deploy.sh

工作流语法还支持在环境对象中加入 url,用于把部署地址写入 deployment status。审批门禁本身只依赖环境名称,不必为了审批额外填写 URL。

六、步骤五:在运行页批准或拒绝

  1. 进入仓库的 Actions,打开 deploy-production。
  2. 点击 Run workflow,从符合环境分支规则的分支触发。
  3. 构建完成后,deploy job 显示 Waiting,页面出现审核通知。
  4. 审批人点击 Review deployments。
  5. 勾选 production,可填写评论,然后选择 Approve and deploy 或 Reject。
原创工作流运行界面中 deploy job 等待审核并显示 Review deployments 弹窗
图4:在工作流运行页批准或拒绝 production 部署的原创结果示意图。

点击 Approve and deploy 后,只有在其他保护规则也通过时 job 才继续,并从此刻起能够访问环境密钥;点击 Reject 会使工作流失败。启用了 Prevent self-review 时,触发该 workflow run 的账号不能完成自己的审批,应由另一名 required reviewer 操作。

七、如何确认配置真的生效

完成一次测试运行后,至少核对下面四个可观察结果:

  • 审批前:deploy job 是 Waiting,而不是已经在 runner 中执行。
  • 审批入口:运行页出现 Review deployments,并能选择 production。
  • 批准后:job 状态从 Waiting 进入 Queued 或 In progress,随后执行部署步骤。
  • 拒绝后:job 不执行部署脚本,workflow run 以失败状态结束。

不要用“页面上出现 production 字样”作为唯一成功标准。真正的门禁证据是 job 在审批前没有进入 runner,环境密钥也没有提前提供。

八、常见问题排查

1. 工作流直接开始部署,没有等待审批

先打开工作流 YAML,确认 environment 写在执行部署的 job 下,而不是全局 env、步骤参数或普通字符串中。再确认环境名称为 production,并且该环境已经保存 Required reviewers。

2. 找不到 Required reviewers

检查仓库是公有、私有还是内部仓库,并核对当前 GitHub 计划。官方页面明确提示:环境的基础能力、私有仓库可用性以及 Required reviewers、Wait timer 等保护规则的可用性并不完全相同。

3. 自己看得到审批按钮,但不能批准

如果该账号触发了本次运行,而环境启用了 Prevent self-review,这是预期行为。让另一名被列为 required reviewer 的用户或团队成员审批,不要关闭规则来绕过制度。

4. 显示分支不允许部署

检查运行使用的 Git ref 是否匹配 Deployment branches and tags。手动触发时要在 Run workflow 下拉框选择允许的分支;分支规则和标签规则分开匹配。

5. 审批前读不到环境 secret

这正是环境保护边界:引用环境的 job 只有在保护规则通过后才能访问环境 secrets。若构建阶段需要公共配置,应使用仓库变量或构建 job 自己的权限模型,不应提前暴露生产密钥。

九、结论

GitHub Actions 的生产审批可以归纳为三层:environment 绑定部署对象、protection rules 决定谁能放行、deployment branches and tags 决定哪些引用可进入。只要 deploy job 明确引用 production,审批前 Waiting、审批后才进 runner,并且生产密钥直到规则通过才可用,这套门禁就形成了完整闭环。

最后建议把“禁止自批、只允许 main、管理员是否可绕过、审批评论规范”写进团队发布制度。界面规则负责强制执行,制度负责解释何时批准、何时拒绝,两者结合才能让部署审批既安全又可追溯。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
Redis 向量查询怎样组合标签过滤与距离排序Redis 向量查询怎样组合标签过滤与距离排序
上一篇
Redis 向量查询怎样组合标签过滤与距离排序
证书链通过验证却不满足策略 OID 是什么原因
下一篇
证书链通过验证却不满足策略 OID 是什么原因
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • PubMedQA数据集详解:生物医学问答基准、功能与应用指南
    PubMedQA
    深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
    395次使用
  • H2O EvalGPT:开源LLM大模型评估与排行榜工具
    H2O EvalGPT
    H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
    475次使用
  • LMArena是什么?伯克利AI模型评估平台使用指南与功能解析
    LMArena
    LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
    479次使用
  • 斯坦福HELM:大语言模型Holistic Evaluation整体评估框架详解
    HELM
    深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
    425次使用
  • MMBench详解:多模态大模型基准测试、功能特点与使用指南
    MMBench
    MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
    251次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议 和 隐私政策
返回登录
  • 重置密码