使用 Netlify CMS 设置暂存工作流



我在Gitlab上有一个Gatsby站点部署到Netlify并使用Netlify-CMS。Netlify可以将站点推送到不同的分支,并将每个分支部署到单独的URL。例如,我当前的站点有一个部署到example.netlify.comproduction分支和一个部署到staging--example.netlify.com的暂存分支。

但是,使用 Netlify CMS 更新内容时创建的提交是另一回事。看起来(至少开箱即用(,Netlify CMS将始终将更改推送到其配置中定义的生产分支,无论签出哪个分支或站点位于何处:

来自文档。

注意:无论您在哪里访问Netlify CMS — 是否正在运行 在本地、暂存环境中或已发布的站点中 — 它将 始终在托管存储库中获取和提交文件(例如, 在 GitHub 上(,在您在 Netlify CMS 中配置的分支上 配置.yml 文件。这意味着在管理 UI 中获取的内容将 匹配存储库中的内容,这可能与您的内容不同 本地运行的网站。这也意味着使用管理员保存的内容 UI 将直接保存到托管存储库,即使您正在运行 本地或暂存中的 UI。

从Netlify CMS使用的项目配置(config.yml

(:
backend:
name: git-gateway
branch: production

因此,目前我可以对网站的结构进行更改,并使其仅在登台时可用,但是没有机制可以更改内容并使它们仅在本地或仅在登台时可用。

我可以看到的一个选项是为每个部署部署不同的config.yml文件(并在本地使用单独的文件(,因此在本地使用 CMS 时,我将分支设置为dev,而在暂存和生产中,我将分支分别设置为stagingproduction。假设Netlify-CMS编辑的内容的位置是隔离的,这应该可以轻松地将内容从staging提升到production

这是最好的方法吗?

目前看来,如果您不使用支持编辑工作流程的 Github,那么您只能靠自己了。

设置 Netlify 以部署同一项目的多个分支非常容易,因此您可以轻松地拥有三个独立的环境。在下面的讨论中,我将使用 Gatsby,但我认为这个问题适用于您正在使用的任何静态站点构建器。

  • dev在本地主机上本地运行时
  • 暂存作为附加分支部署添加到 Netlify 的暂存分支。
  • 生产添加到 Netlify 的生产分支作为生产分支。

如果我们不使用Netlify CMS,这就是我们所需要的。我们可以在本地开发,并在想要提供更改时推送到暂存,然后通过将暂存合并到生产中并在这些更改准备就绪时推送到生产 brancg 来提升。

但是,开箱即用的所有这些环境都将使用相同的config.yml,这意味着所有三个环境都将从同一分支加载并更改同一分支 - 无论您将哪个分支定义为branch的值。

我们需要的是一种将内容更改隔离到每个环境的方法,以便对dev分支进行开发更改,对过渡所做的更改对staging分支进行更改,并对production分支进行生产更改。

这可以通过将特定于环境的config.yml部署到每个远程环境,并默认为开发中的dev分支来实现。执行此操作的最简单方法可能是使用预生成步骤使用当前分支的名称填充config.ymlbranch字段。

在我看来,这是一个非常不令人满意的解决方案,并且是一个如此常见的用例,Netlify CMS应该开箱即用。我在这里打开了一个问题。

最新更新