问题标签 [github-webhook]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
255 浏览

python - (Python, Flask) Flask 路由函数由于 IO 绑定耗时太长,所以客户端超时

我目前正在从头开始开发音乐流媒体服务。我正在做后端和前端。在此开发阶段,我有一台用于测试的服务器。它有一个 Go 服务器应用程序和一个 GitHub 存储库的克隆,我将 Vue.js 代码推送到前端。

部署过程很简单。一旦我将更改推送到主分支,我就会ssh进入服务器,cd进入 Vue.js 项目文件夹git pullnpm run build然后瞧!由于这是一个如此简单且可预测的任务,我想使用 GitHub 的 webhook 和 Python 的 Flask 框架来自动化它。所以我写了这个(它有点工作):

但是,该onpush函数git pull在其subprocess.run调用中运行(从 GitHub 服务器获取数据需要时间),并且没有一个是并发的。因此,使用路由的return '200 - OK'值作为服务器的响应(如果我没记错的话,这就是 Flask 所做的)会导致以下事实:

  1. GitHub webhook 客户端超时并将有效负载显示为未交付(即使在服务器端一切正常 - 只是客户端无法等待足够长的时间来获得他们期望的响应)。
  2. 我不能先响应然后再调用onpush,因为响应 = 从函数返回

Webhook 调用超时

所以我几乎在寻找一种方法来让这个东西足够快地响应,这样 GitHub 就不会超时,同时仍然能够git pull. 这可能可以通过一些并发或线程来解决,但我真的不知道如何。

0 投票
1 回答
533 浏览

ssl - Github webhook over https:“服务超时”

这个问题是关于使 github webhook 在 https 上工作。这也是一个没有经验的人提出的关于故障排除最佳实践的问题。

我的登台站点有一个 github webhook,它指向https://staging.domain.com/git_webhook

如果我将它指向 http 而不是 https,它会完美运行。但是使用 https,github 会响应:We couldn’t deliver this payload: Service Timeout. 即使为 webhook 禁用 SSL 验证也会发生这种情况。

使用 Postman 和 curl,webhook 可以在 https 上完美运行。

我试过的

  1. 检查防火墙是否负责。

服务器是带有 apparmor、ufw 和 fail2ban 的 Ubuntu 18.04。在 ufw 中,https 对所有人开放。我已经禁用了每个服务并重新启动了 apache,但没有成功。我还没有找到任何单独列出 github ip 的规则。但是我没有经验,如果它们存在,我可能不明白如何为它们寻找足够的深度。我认为简单地禁用这些服务就足以测试它们是否参与其中。

  1. 使用 tshark 检查来自 github 的传入 HTTPS POST 请求

tshark 显示在“Server Hello, Certificate, Server Key Exchange, Server Hello Done”之后,没有握手。从我的服务器到 github 有 4 或 5 次 [PSH,ACK] 重传,没有来自 github 的响应,然后 github 关闭连接。

  1. 这是我的 SSL 证书的问题吗?

我的主 domain.com 有一个不适用于任何子域的 Comodo SSL 证书。我的 staging.domain.com 有一个有效的 Let's Encrypt SSL 证书。

当我运行时,openssl s_client -showcerts -servername staging.domain.com -connect staging.domain.com:443 </dev/null我得到了属于 staging.domain.com 的 Let's Encrypt 证书

但是当我运行时,openssl s_client -showcerts -connect staging.domain.com:443 </dev/null我得到了属于主 domain.com 的 Comodo 证书

可能github的webhook服务不能处理SNI?(主域和子域 Apache 虚拟主机都包括<ServerName ... >

然后我禁用了 Comodo SSL 证书,并扩展了 Let's Encrypt 证书以包括 domain.com 和 staging.domain.com,并重新启动 Apache。仍然是来自 github 的“服务超时”。

github 不喜欢 Let's Encrypt 吗?我从 Comodo 订购了 30 天的免费证书,并将其应用于 staging.domain.com。没运气。

当我通过https://www.ssllabs.com/ssltest运行 staging.domain.com 时,它显示了 Let's Encrypt 证书,但有趣的是,在其下方,它显示了一个“Certificate #2”,这是域的 Comodo 证书.com。而且由于域名不匹配,该证书被标记为大量红色警告。这是异常行为吗,我是否应该在访问(或分析)staging.domain.com 时找到一种无法检测到 domain.com 证书的方法?


在这一点上,我完全没有想法。我将不胜感激任何和所有的指导。这也是我的第一个 SO 问题,我也愿意就我的问题礼仪提出建议。


编辑 1:当激活 webhook 推送事件时,这里是sudo tshark -d tcp.port==443,ssl -f "net 140.82.112.0/20 or net 185.199.108.0/22 or net 192.30.252.0/22"(那些是 github 的 webhook IP)的输出:

当我查看 tshark 的解密输出时,第 6 帧似乎是 SSL 证书信息从我的服务器到 github 的初始传输。然后第 7 帧到第 11 帧是相同信息的 5 次重传,都没有回复。之后,github 只是启动关闭连接,没有错误。


编辑 2:我已经尝试使用默认的 Apache 和自签名 SSL 证书启动测试服务器。同样的问题。我还尝试在我的面向公众的网站上测试 webhook,该网站具有功能齐全、签名和付费的 Comodo 证书。同样的问题。

0 投票
1 回答
10632 浏览

reactjs - 如何在 React 中使用 API webhook 来接收通知

这是我第一次使用 Webhooks,我想知道是否可以接收来自 Webhooks 订阅的通知。我正在为我的项目使用 create-react-app,并希望在每次提交到我的 github 存储库时使用 github 的 Webhooks 订阅来发送警报。我将如何处理这个项目以及我需要做什么来测试我的 Webhooks 订阅?

0 投票
0 回答
450 浏览

jenkins - 如何在 Jenkins 声明式管道中获取 Github Webhook 有效负载数据?

我有一个使用 Github webhooks 触发的 Jenkins 声明性管道。

Jenkins 作业可以在拉取请求或合并时触发。

我希望每次都运行 3 个步骤中的 2 个(构建和测试)——合并和 PR。

我希望最后一步部署,仅在合并到“开发”分支时触发。

为此,我认为我需要访问触发该作业的 github webhook 有效负载(其主体和请求标头)。如何从声明性管道访问这些数据?

这是我想要的要点:

0 投票
0 回答
295 浏览

jenkins - 部署事件未触发 Jenkins 多分支管道

我已经将工作设置为多分支管道,我想在来自github的部署事件上触发它,但是当我这样做时没有任何反应。

Jenkins自动管理 webhook。webhook 上的部署复选框已标记,当我尝试其他事件时,如tag merge push pull requestetc... 它可以工作。

有人可以帮忙吗?

0 投票
1 回答
380 浏览

git - GitHub webhook 有效负载中没有“ref”标签

我正在尝试设置 GitHub webhook 以仅在 GitHub 事件是提交或合并到master分支时触发一些后端活动。

根据我的一些研究,我可以依靠有效负载中的“ref”标签来确定它是否是一个master分支。但是,显然没有任何关于此事件针对哪个分支的信息。

我在这里做错什么了吗?

0 投票
2 回答
152 浏览

django - 为在 Windows Server 2016 IIS 上运行的 Django 项目运行“git pull”

我当前的设置有一个在 Windows 2016 IIS 上运行的 Django 项目。

该项目托管在 GitHub 上以进行协作,我想设置一个 GitHub webhook,以便每当有任何协作者推送到 master 分支时,IIS 服务器将运行“git pull”以更新服务器上的项目。

这通常是什么设置?

到目前为止,我尝试的是在 Django 项目中创建一个端点,每当调用这个端点时,都会运行 Python 子进程以在项目本身中运行“git pull”命令。但是,每当我运行它时,它都会从 IIS 获得 500 响应。

0 投票
1 回答
643 浏览

webhooks - 如何在 Ubuntu 18.04 上设置 Github Webhook?

我正在关注 AWS 的部署指南,可以在这里找到。我已经完成了设置 Webhook 的工作。我正在使用下面的命令来启用和启动 webhook,如文档中所述。

但是,当我sudo systemctl status webhook用来检查 webhook 的状态时,我得到以下输出,表明存在错误。

● webhook.service - Github webhook 已加载:已加载(/etc/systemd/system/webhook.service;已启用;供应商预设:已启用) 活动:自 2020 年 6 月 29 日星期一 14:21 起失败(结果:退出代码): 43 世界标准时间;29 秒前进程:26849 ExecStart=/usr/bin/nodejs /home/ubuntu/NodeWebHooks/webhook.js(code=exited,status=1/FAILURE) 主 PID:26849(code=exited,status=1/FAILURE)

6 月 29 日 14:21:42 ip-172-31-41-113 systemd 1:webhook.service:主进程退出,代码=退出,状态=1/失败 6 月 29 日 14:21:42 ip-172-31-41 -113 systemd 1:webhook.service:失败,结果为“退出代码”。6 月 29 日 14:21:43 ip-172-31-41-113 systemd 1:webhook.service:服务暂停时间结束,计划重启。6 月 29 日 14:21:43 ip-172-31-41-113 systemd 1:webhook.service:计划重启作业,重启计数器为 5。6 月 29 日 14:21:43 ip-172-31-41-113 systemd 1 : 停止 Github webhook。6 月 29 日 14:21:43 ip-172-31-41-113 systemd 1:webhook.service:启动请求重复太快。6 月 29 日 14:21:43 ip-172-31-41-113 systemd 1:webhook.service:失败,结果为“退出代码”。6 月 29 日 14:21:43 ip-172-31-41-113 systemd 1 : 无法启动 Github webhook。

此设置可能有什么问题?

系统

Node.js 版本:v12.18.1

NPM 版本:6.14.5

Strapi 版本:3.0.1

数据库:PostgreSQL

操作系统:Ubuntu 18.04 LTS

0 投票
1 回答
105 浏览

github - 在存储库初始化期间自动创建 Github 主题

关于 Github 主题:https ://docs.github.com/en/github/administering-a-repository/classifying-your-repository-with-topics

有没有办法自动创建这些主题/标签?例如,当初始化组织内的存储库时,我想通过 webhook 获取该事件,然后自动添加一个名为“abc-repo”的主题。有可能做这样的事情吗?

我一直在阅读,但还没有看到自动化这个过程的方法。看起来它们只是通过 Github 界面从存储库本身中添加的。

0 投票
0 回答
168 浏览

jenkins - 在 Jenkins 声明性管道中访问 Github webhook 有效负载

我使用 Jenkins BlueOcean 创建了一个多分支 github 管道。它能够从我的存储库接收推送通知并开始构建。但是,我想从向 Jenkins 发出的构建请求的有效负载中访问特定信息。我在构建中看不到任何与有效负载有关的环境变量。有没有办法访问这些信息?我按照这里的步骤操作 -如何在 Jenkins 中处理 github webhook 有效负载?但我的有效载荷参数有空值