# 使用 GitHub CLI 转发 Webhooks 进行测试

可以使用 GitHub CLI 在开发环境中测试 Webhook，避免了端口转发或使用第三方工具带来的复杂性。

## 关于使用 GitHub CLI 接收 Webhook

更改集成代码时，在本地环境中运行代码可以快速测试和迭代，而无需部署代码。 可以使用 GitHub CLI 将 Webhook 转发到本地环境。

GitHub CLI 中的 Webhook 转发仅适用于存储库和组织 Webhook。 如果要在本地测试其他类型的 Webhook，则需要手动执行此操作。 有关详细信息，请参阅“[测试 web 挂钩](/zh/enterprise-cloud@latest/webhooks/testing-and-troubleshooting-webhooks/testing-webhooks)”。

> \[!WARNING]
> Webhook 转发仅供测试和开发期间使用。 不支持在生产环境中使用它来处理实时 Webhook。

## 使用 GitHub CLI 接收 Webhook

> \[!NOTE]
> 若要详细了解 GitHub CLI，请参阅“[关于 GitHub CLI](/zh/enterprise-cloud@latest/github-cli/github-cli/about-github-cli)”。

1. 若要安装 GitHub CLI 扩展以启用 Webhook 转发，请使用 `extension install` 子命令。

   ```shell
   gh extension install cli/gh-webhook
   ```

2. 如果想转发组织 Webhook，请将 `admin:org_hook` 范围添加到 GitHub CLI 登录，以便拥有所需的权限。

   ```shell
   gh auth refresh --scopes admin:org_hook
   ```

3. 在本地启动应用程序，并记下希望接收 Webhook 的 URL。 本指南假定应用程序正在侦听 `http://localhost:3000/webhook` 中的 Webhook 事件。

4. 若要设置要传递到应用程序的 Webhook，请运行 `webhook forward` 子命令。 将 `REPOSITORY` 替换为存储库的名称。 例如，`monalisa/octocat`。 将 `EVENTS` 替换为要接收的事件的逗号分隔列表。 例如，`issues,pull_request`。 将 `URL` 替换为应用程序希望接收 Webhook 的本地 URL。 例如，`"http://localhost:3000/webhook"`。 若要侦听组织 Webhook 而不是存储库 Webhook，请将 `--repo` 标志替换为 `--org` 标志。 例如，`--org="octo-org"`。

   ```shell
   gh webhook forward --repo=REPOSITORY --events=EVENTS --url=URL
   ```

让命令在后台运行。 它将接收指定存储库的所有指定事件，并将其转发到在指定 URL 处运行的 Webhook 处理程序。

> \[!NOTE]
> 对于每个存储库和组织，一次只能有一个人使用 Webhook 转发。 如果你尝试设置 Webhook 转发，但其他人已在该组织或存储库中使用该转发，则会收到 `Hook already exists` 错误。