# 部署和环境

查找有关部署保护规则、环境机密和环境变量的信息。

## 部署保护规则

部署保护规则要求通过特定的条件，然后引用环境的作业才能继续。 可以使用部署保护规则来要求人工审批、延迟作业或将环境限制于某些分支。 还可以创建并实现由 GitHub Apps 提供支持的自定义保护规则，以使用第三方系统控制引用 GitHub 上配置的环境的部署。

第三方系统可以是可观测性系统、变更管理系统、代码质量系统或其他手动配置，用于在将部署安全部署到环境之前评估就绪情况。

> \[!NOTE]
> 可以在存储库中安装任意数量的基于 GitHub Apps 的部署保护规则。 但是，最多可以同时在环境中启用 6 个部署保护规则。

### 需要的审查者

使用必需的审查者，要求特定人员或团队批准涉及该环境的工作流程作业。 您最多可以列出六个用户或团队作为审查者。 审查者必须至少具有对仓库的读取访问权限。 只有一名必需的审查者批准即可，该任务就能继续进行。

也可以选择阻止对受保护环境中的部署进行自评审。 如果启用此设置，则启动部署的用户将无法批准部署作业，即使他们是必需的审阅者也是如此。 这可确保受保护环境中的部署始终经过多人评审。

有关由必需审查者审查引用环境的作业的详细信息，请参阅“[审查部署](/zh/actions/managing-workflow-runs/reviewing-deployments)”。

> \[!NOTE]
> 如果你使用的是 GitHub Free、GitHub Pro 或 GitHub Team 计划，所需的审阅者仅适用于公共存储库。

### 等待计时

在最初触发作业后，使用等待计时器将作业延迟特定时间。 时间（分钟）必须是 1 至 43,200（30 天）之间的整数。 等待时间不会计入可计费时间。

> \[!NOTE]
> 如果你使用的是 GitHub Free、GitHub Pro 或 GitHub Team 计划，等待计时器仅适用于公共存储库。

### 部署分支和标记

使用部署分支和标记来限制哪些分支和标记可以部署到环境中。 以下是环境部署分支和标记的选项：

* 无限制\*\*\*\*：对于可以部署到环境中的分支或标记无限制。

* 仅限受保护的分支：只有启用了分支保护规则的分支才能部署到环境\*\*\*\*。 如果没有为仓库中的任何分支定义分支保护规则，那么所有分支都可以部署。 有关分支保护规则的详细信息，请参阅“[关于受保护分支](/zh/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/about-protected-branches)”。

  > \[!NOTE]
  > 部署工作流运行由与受保护分支同名的标记触发，并且与受保护分支名称匹配的分支无法部署到环境中。

* 所选分支和标记：只有与指定名称模式匹配的分支和标记才能部署到环境\*\*\*\*。

  部署分支或标记规则与工作流运行的 `GITHUB_REF` 相匹配。 有关每个工作流触发器的 `GITHUB_REF` 值，请参阅 [触发工作流的事件](/zh/actions/using-workflows/events-that-trigger-workflows)。 如果将 `releases/*` 指定为部署分支或标记规则，则只有名称以 `GITHUB_REF` 开头的 `releases/` 可以部署到该环境。 添加另一个分支规则 `refs/pull/*/merge` 也将允许由 `pull_request` 事件触发的工作流部署到环境。 通配符不匹配 `/`，若要匹配以 `release/` 开头并包含其他单斜杠的分支或标记，请使用 `release/*/*`。 有关部署分支的语法选项的详细信息，请参阅 [Ruby `File.fnmatch` 文档](https://ruby-doc.org/core-2.5.1/File.html#method-c-fnmatch)。

  > \[!NOTE]
  > 必须单独为分支或标记配置名称模式。

> \[!NOTE]
> 部署分支和标签适用于所有公共存储库。 对于使用 GitHub Pro 或 GitHub Team 计划的用户，部署分支和标记也适用于专用存储库。

### 允许管理员绕过配置的保护规则

默认情况下，管理员可以绕过保护规则，并强制部署到特定环境。 有关详细信息，请参阅“[审查部署](/zh/actions/managing-workflow-runs/reviewing-deployments#bypassing-environment-protection-rules)”。

或者，可以将环境配置为禁止绕过环境的所有部署保护规则。

> \[!NOTE]
> 允许管理员绕过保护规则仅适用于使用 GitHub Free、GitHub Pro 和 GitHub Team 计划的用户的公共存储库。

### 自定义部署保护规则

> \[!NOTE]
> 自定义部署保护规则目前为 公开预览，可能随时更改。

可以启用自己的自定义保护规则来限制第三方服务的部署。 例如，可以使用 Datadog、Honeycomb 和 ServiceNow 等服务为部署到 GitHub 提供自动审批。有关详细信息，请参阅“[创建自定义部署保护规则](/zh/actions/deployment/protecting-deployments/creating-custom-deployment-protection-rules)”。

在存储库上创建自定义部署保护规则并安装后，可以为存储库中的任何环境启用自定义部署保护规则。 有关配置和启用自定义部署保护规则的详细信息，请参阅“[配置自定义部署保护规则](/zh/actions/deployment/protecting-deployments/configuring-custom-deployment-protection-rules)”。

> \[!NOTE]
> 自定义部署保护规则仅适用于使用 GitHub Free、GitHub Pro 和 GitHub Team 计划的用户的公共存储库。

## 环境机密

存储在环境中的机密仅可用于引用环境的工作流程作业。 如果环境需要审批，在所需审阅者之一批准之前，作业无法访问环境机密。 有关机密的详细信息，请参阅“[机密](/zh/actions/security-for-github-actions/security-guides/about-secrets)”。

> \[!NOTE]
>
> * 在自托管运行器上运行的工作流不会在一个孤立的容器中运行，即使它们使用环境。 环境机密应与存储库和组织机密的安全级别相同。 有关详细信息，请参阅“[安全使用指南](/zh/actions/security-guides/security-hardening-for-github-actions#hardening-for-self-hosted-runners)”。
> * 如果使用的是 GitHub Free，则环境机密仅在公共存储库中可用。 要访问专用存储库或内部存储库中的环境机密，必须使用 GitHub Pro、GitHub Team 或 GitHub Enterprise 。 有关切换计划的详细信息，请参阅“[升级您的帐户套餐](/zh/billing/managing-the-plan-for-your-github-account/upgrading-your-accounts-plan)”。

## 环境变量

存储在环境中的变量仅可用于引用环境的工作流作业。 只能使用 [`vars`](/zh/actions/learn-github-actions/contexts#vars-context) 上下文访问这些变量。 有关详细信息，请参阅“[在变量中存储信息](/zh/actions/learn-github-actions/variables)”。

> \[!NOTE]
> 环境变量适用于所有公共存储库。 对于使用 GitHub Pro 或 GitHub Team 计划的用户，环境变量也适用于专用存储库。