Firebase 托管 Webhook

Posted

技术标签:

【中文标题】Firebase 托管 Webhook【英文标题】:Firebase Hosting Webhooks 【发布时间】:2021-06-14 08:20:00 【问题描述】:

我有一个我正在尝试使用 Firebase 托管解决的特定用例,具体如下:

    我正在使用 Gridsome 生成静态网站 在构建之前,Gridsome 使用 Graphql 并从 Headless CMS 中抓取一些博文,然后用于为每个博文创建静态页面 目前,每当我通过 Github 合并到 master 时,Gridsome 构建都会自动部署到 Firebase Hosting(这已经很好用了)

我面临的问题是,每当我在 Headless CMS 上发布新博文时,我都想触发 Gridsome 构建 + Firebase 托管部署(它可以选择在新博文上发布 POST)。我知道这在 Vercel 等其他解决方案上是可能的,但现在我正在使用 Firebase,并希望坚持使用该套件。

我尝试使用 REST API 没有任何运气,而 Github Webhooks 反过来工作,并没有解决我的问题。我认为可能有机会调用 Firebase 函数并使用 CLI 进行部署或其他操作。

我想知道的是这个功能是否存在以及如何完成这个场景。

谢谢。

【问题讨论】:

您看过 Firebase 函数吗?您可以创建一个可以通过向其发送 HTTP 请求来调用的 HTTP 函数。然后,您可能可以使用指向该功能的 CMS 设置 webhook。我不确定他们是否可以触发您的网站重建,但他们可能会。 【参考方案1】:

我假设您使用 Github Actions 构建您的项目,然后将其部署到 firebase。

我向您推荐的最简单的解决方案是将您的操作设置为不仅在推送到您的主分支时触发,而且还触发请求。

步骤

repository_dispatch 事件设置您的操作触发器

on:
  repository_dispatch:

然后使用repoworkflow 权限为您的Github 帐户创建一个Access token。

现在您只需在以下 URL https://api.github.com/repos/<username>/<repo>/dispatches 上设置您的 CMS 发布请求,并在标头中使用您的授权令牌。

例子:

curl --url 'https://api.github.com/repos/<USERNAME>/<REPO>/dispatches' \
  --header 'authorization: Bearer <TOKEN>' \
  --data '"event_type": "content updated"'

现在,每当您从 CMS 向端点发出 POST 请求时,您的 Action 也应该调度。

【讨论】:

以上是关于Firebase 托管 Webhook的主要内容,如果未能解决你的问题,请参考以下文章

Firebase 托管不生成 firebase.json

Firebase 预计托管在 AWS 上?

重写 firebase.json 的规则以配置 firebase 托管

如何限制 Firebase 云功能仅接受来自 Firebase 托管网站的请求

消息传递和 Firebase 托管中的 Firebase Service Worker 错误

由于 CORS 问题,firebase 托管阻止脚本