使用 Netlify CMS 设置暂存工作流

Und*_*ion 4 javascript gatsby netlify netlify-cms

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

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

文档

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

来自config.ymlNetlify CMS 使用的项目配置 ( ):

backend:
  name: git-gateway
  branch: production
Run Code Online (Sandbox Code Playgroud)

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

我可以看到的一种选择是为config.yml每个部署部署一个不同的文件(并在本地使用一个单独的文件),因此在本地使用 CMS 时,我将分支设置为dev,在登台和生产中,我将分支设置为stagingproduction分别。假设通过Netlify-CMS编辑被隔离的内容的位置,这应该可以很容易地从促进内容的变化stagingproduction

这是最好的方法吗?

Und*_*ion 5

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

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

  • dev在本地本地运行时
  • staging添加到 Netlify 作为附加分支部署的 staging 分支。
  • 生产生产分支添加到 Netlify 作为生产分支。

如果我们不使用 Netlify CMS,这就是我们所需要的。我们可以在本地开发并在我们想要进行更改时推送到 staging,然后通过将 staging 合并到生产中并在这些更改准备好时推送到生产分支来进行推广。

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

需要的是一种将内容更改隔离到每个环境的方法,以便在开发中对dev分支进行更改,对分支进行暂存更改,对staging分支进行生产中的更改production

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

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