4

我在 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.yml从Netlify CMS 使用的项目配置( ):

backend:
  name: git-gateway
  branch: production

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

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

这是最好的方法吗?

4

1 回答 1

5

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

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

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

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

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

需要一种方法来隔离每个环境的内容更改,以便在开发中对dev分支进行更改,对分阶段进行的staging更改对分支进行,对生产进行的更改对production分支进行。

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

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

于 2018-09-10T09:46:35.137 回答