dintel/php-github-webhook

处理 GitHub webhook 调用的简单类

0.2.0 2016-11-20 11:41 UTC

This package is not auto-updated.

Last update: 2024-09-28 16:15:29 UTC


README

概览

本包包含类,允许通过在 GitHub 仓库每次 push 时执行 git pull 来保持 git 仓库的最新状态。要实现此功能,您需要将简单的脚本添加到 git 仓库,并在 GitHub 仓库上配置 webhook。

Webhook 脚本

为了使 webhook 脚本工作,您需要进行以下三件事情

  1. 将此包添加到 composer 依赖项
  2. 添加一个简单的 PHP 脚本,该脚本将实际处理 webhook 调用
  3. 配置 GitHub 仓库 webhook,以便在将提交推送到 GitHub 时调用

Composer

要添加依赖项,只需编辑您的 composer.json 文件,并将以下依赖项添加到 require 块中 - "dintel/php-github-webhook": "0.1.*"。这是将 php-github-webhook 库引入项目的最简单方法。

Webhook 脚本

要实际处理 webhook 调用,您需要添加一个可公开访问的 PHP 脚本,并在 GitHub 调用它时运行 git pull。以下是一个此类 webhook 脚本的简单示例

<?php
require(__DIR__ . "/vendor/autoload.php");

use GitHubWebhook\Handler;

$handler = new Handler("<your secret>", __DIR__);
if($handler->handle()) {
    echo "OK";
} else {
    echo "Wrong secret";
}

在上述脚本中,<your secret> 应该是您选择的随机字符串,并在定义 webhook 时提供给 GitHub。有关密钥和它们在 GitHub webhook 中如何使用的更多信息,请参阅 Webhooks | GitHub API

注意:由于此脚本中包含敏感数据(用于验证请求的 secret),建议不要将其放在 git 控制下,方法是在 .gitignore 文件中排除它。另一种选择是从某个环境变量中获取 secret,该变量将由其他方式定义(例如,在 apache 配置中的 SetEnv)。

GitHub 仓库配置

要设置 GitHub 上的仓库 webhook,请转到您的仓库的 设置 页面,然后单击 Webhooks & services。之后,单击 添加 webhook

在表单中填写以下值

  • Payload URL - 输入 webhook 脚本的全局 URL
  • Content type - 可以是 "application/json" 或 "application/x-www-form-urlencoded"
  • Secret - 与传递给 Handler 对象构造函数的密钥相同
  • Webhook 应仅接收 push 事件,并且当然处于活动状态

单击 添加 webhook 按钮,这样就完成了。

Handler

Handler 类实际上处理 webhook 调用。它首先检查 GitHub 签名,然后在签名和密钥匹配的情况下执行 git pull

以下是方法列表的完整列表

  • __construct($secret, $gitDir, $remote = null) - 构造函数。构造新的 webhook 处理器,该处理器将验证发送到它的请求是否使用 $secret 签名。必须将 $gitDir 设置为必须更新的 git 仓库的路径。可选的 $remote 指定应拉取哪个远程仓库。
  • getData() - 获取器。在验证成功后返回解析后的数据数组,否则返回 null
  • getDelivery() - 获取器。在验证成功后返回来自 GitHub 的唯一交付号码。否则返回 null
  • getEvent - 获取器。在验证成功后返回触发此 webhook 的事件名称。否则返回 null
  • getGitDir() - 获取器。返回传递给构造函数的 $gitDir
  • getGitOutput - 获取器。在验证成功后返回git的输出,以行数组的形式。否则返回 null
  • getRemote() - 获取器。返回构造函数中传递的 $remote
  • getSecret() - 获取器。返回构造函数中传递的 $secret
  • handle() - 处理请求。验证传入的请求是否正确使用 $secret 签名,并在验证成功后执行 git pull。成功时返回 true,验证失败时返回 false
  • validate() - 仅验证请求。返回一个布尔值,表示请求是否正确使用 $secret 签名。