Skip to main content

创建自定义部署保护规则

使用 GitHub Apps 通过第三方系统自动保护部署。

谁可以使用此功能?

自定义部署保护规则在所有计划的公共存储库中可用。 要访问专用存储库或内部存储库中的自定义部署保护规则,必须使用 GitHub Enterprise。 有关详细信息,请参阅 GitHub 的计划

先决条件

注意

自定义部署保护规则目前为 公共预览版,可能随时更改。

有关部署保护规则的一般信息,请参阅 Deploying with GitHub Actions

使用 GitHub Apps

创建自定义部署保护规则

  1. 创建 GitHub App。 有关详细信息,请参阅“注册 GitHub 应用”。 按如下所示配置 GitHub App。

    1. (可选)在“标识和授权用户”下的“回调 URL”文本字段中,输入回调 URL。 有关详细信息,请参阅“关于用户授权回调 URL”。
    2. 在“权限”下,选择“存储库权限”。
    3. 在“操作”右侧,单击下拉菜单,然后选择“访问: 只读”。
      新 GitHub 应用的“仓库权限”部分的屏幕截图。 “操作”权限显示“只读”,并以橙色框出。
    4. 在“部署”右侧,单击下拉菜单,然后选择“访问: 读取和写入”。
      新 GitHub 应用的“仓库权限”部分的屏幕截图。 “部署”权限显示“读取和写入”,并以橙色框出。
    5. 在“订阅事件”下,选择“部署保护规则”。
      新 GitHub 应用的“订阅事件”部分的屏幕截图。 以橙色框出了“部署保护规则”的复选框。
  2. 在存储库中安装自定义部署保护规则并启用它以供使用。 有关详细信息,请参阅“配置自定义部署保护规则”。

批准或拒绝部署

工作流到达引用了已启用自定义部署保护规则的环境的作业后,GitHub 会将 POST 请求发送到配置的包含 deployment_protection_rule 有效负载的 URL。 可以编写部署保护规则,以自动发送基于 deployment_protection_rule 有效负载批准或拒绝部署的 REST API 请求。 按如下所示配置 REST API 请求。

  1. 验证传入的 POST 请求。 有关详细信息,请参阅“验证 Webhook 交付”。

  2. 使用 JSON Web 令牌以 GitHub App 形式进行身份验证。 有关详细信息,请参阅“验证为 GitHub 应用程序”。

  3. 使用 deployment_protection_rule Webhook 有效负载中的安装 ID 生成安装令牌。 有关详细信息,请参阅“关于使用 GitHub 应用进行身份验证”。

    curl --request POST \
    --url "https://api.github.com/app/installations/INSTALLATION_ID/ACCESS_TOKENS" \
    --header "Accept: application/vnd.github+json" \
    --header "Authorization: Bearer {jwt}" \
    --header "Content-Type: application/json" \
    --data \
    '{ \
       "repository_ids": [321], \
       "permissions": { \
          "deployments": "write" \
       } \
    }'
    
  4. (可选)若要在不对 GitHub 执行任何其他操作的情况下添加状态报告,请向 /repos/OWNER/REPO/actions/runs/RUN_ID/deployment_protection_rule 发送 POST 请求。 在请求正文中,省略 state。 有关详细信息,请参阅“工作流运行的 REST API 终结点”。 最多可以针对同一部署发布状态报告 10 次。 状态报告支持 Markdown 格式,长度最多为 1024 个字符。

  5. 若要批准或拒绝请求,请向 /repos/OWNER/REPO/actions/runs/RUN_ID/deployment_protection_rule 发送 POST 请求。 在请求正文中,将 state 属性设置为 approvedrejected。 有关详细信息,请参阅“工作流运行的 REST API 终结点”。

  6. (可选)通过向 /repos/OWNER/REPOSITORY_ID/actions/runs/RUN_ID/approvals 发送 GET 请求来请求运行工作流的批准状态。 有关详细信息,请参阅“工作流运行的 REST API 终结点”。

  7. (可选)查看 GitHub 上的部署。 有关详细信息,请参阅“审查部署”。

在 GitHub Marketplace 中发布自定义部署保护规则

可以将 GitHub App 发布到 GitHub Marketplace,使开发人员能够发现合适的保护规则并将其安装在他们的 GitHub 存储库中。 或者,可以浏览现有的自定义部署保护规则以满足需求。 有关详细信息,请参阅 关于面向应用的 GitHub Marketplace在 GitHub Marketplace 中上架应用程序