如何设置创作环境以将站点发布到远程 git 存储库?

How to setup authoring env to publish site to remote git repo?

  1. 我下载并开始创作环境(crafter-cms-authoring.zip)
  2. 已创建由远程 git 存储库支持的站点,如以下所述:Create site based on a blueprint then push to remote bare git repository
  3. 创建了一个内容类型,新页面。
  4. 发布了所有内容

现在,我希望我可以在远程仓库中看到我的更改。但我所能看到的只是上面第 2. 步的初始提交。没有新的内容类型,没有新的页面,没有分支“直播”。 (但是内容项在本地存储库中可见)

缺少什么?

编辑: 由于Creafter可以通过多种方式设置,为了阐明我的部署场景,我添加了部署图+简短描述。

有 3 台主机 - 每个环境一台 + 共享 git 存储库。

创作
这是工作室所在的地方,内容作者进行更改。每个更改都保存到 sandbox 本地 git 存储库。发布内容时,更改会拉取到 published 本地 git 存储库。这两个本地存储库无法从其他主机访问

送货
这就是提供发布内容到最后的内容 user/application。 Deployer 负责获取新发布到交付实例。它通过轮询(定期从)特定的 git 存储库来实现。当它提取新更改时,它会更新本地 git 存储库 siteSolr 索引。

Gitlab
此主机 git 存储库 site。它 可从创作和交付主机访问。创建后,新的 site 被推送到这个 repo。 Deployers 的交付实例也会轮询回购以获取新更改。

为了使此设置生效,已发布的更改必须以某种方式最终出现在 Gitlab 的 site 存储库中,但它们不会(从 Authoring Deployer 到 Gitlab 的 site)


基于@summerz 回答的解决方案

我在创作 Deployer 中实现了 GitPushProcessor 并配置了新的部署目标,将 mysite-live.yaml 添加到 /opt/crafter-cms-authoring/data/deployer/target/:

target:
    env: live
    siteName: codelists
    engineUrl: http://localhost:9080
    localRepoPath: /opt/crafter-cms-authoring/data/repos/sites/mysite/published 
    deployment:
        pipeline:
        - processorName: gitPushProcessor
            remoteRepo:
                url: ssh://path/to/gitlab/site/mysite

我认为您可能将 pushpublish 混淆了。

关于出版

在使内容上线的批准工作流之后,创作 (Studio) 发布到交付 (引擎)。创作是安全地管理和预览内容(以及代码,如果你喜欢的话),然后将其发布到实时交付节点以交付到 end-user.

关于 DevOps

站点的本地 git 存储库可以是 pushed/pulled to/from 远程存储库。这意味着:

  • 代码可以从开发人员的工作站流向 Studio(通过 github、gitlab、bitbucket 等)<==这是向前移动的代码(并且可以通过类似的环境流动QA、负载测试等)
  • 内容可以以类似的方式从 Studio 回流到开发人员的本地工作站 <== 这是内容回流(如果需要,您可以在笔记本电脑上拥有生产内容)

当代码从开发人员流向 Studio 时,Studio 会从远程 git 存储库中提取代码。

当内容从 Studio 回流到开发人员时,就是 Studio 推送到远程 git 存储库的时候。

文档

可以在这里找到与发布相关的系统架构的良好鸟瞰图:http://docs.craftercms.org/en/3.0/developers/architecture.html

这里有一篇解释 DevOps workflow/Git 内容的好文章:http://docs.craftercms.org/en/3.0/developers/developer-workflow.html


根据扩展问题更新

根据您的问题我的新理解是:由于某些限制(即使通过 SSH 甚至对源 IP 有限制),您不能允许 Delivery 中的部署人员访问 Authoring 的 published repo 进行轮询).您希望将 GitLab 用作内容库的一种形式,可以作为 push 从创作和 pull 从交付访问。

如果我的理解是正确的,我可以立即想到两个解决方案。

  1. 在创作中设置一个 cron 作业以定期推送到 GitLab。 您需要在 published 中将 GitLab 添加为远程仓库,然后像这样设置一个 cron:

* * * * * git --git-dir /opt/crafter/data/repos/sites/{YOUR_SITE}/published/.git push 2>&1

先手动测试,然后 cron。

  1. 编写一个部署处理器,可以根据更改将内容推送到 end-point,或者等待票证:https://github.com/craftercms/craftercms/issues/2017。 构建完成后,您需要在 Authoring 中配置另一个将推送到 GitLab 的部署程序。

无论哪种情况,请注意不要在 GitLab 中更新内容,因为您使用的是 published 而不是 sandbox。 (请参阅上面的 DevOps 说明以了解原因。)