dintel / php-github-webhook
处理 GitHub webhook 调用的简单类
Requires
- php: >=5.4
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 脚本工作,您需要进行以下三件事情
- 将此包添加到 composer 依赖项
- 添加一个简单的 PHP 脚本,该脚本将实际处理 webhook 调用
- 配置 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
签名。