如何设置创作环境以将站点发布到远程 git 存储库?
How to setup authoring env to publish site to remote git repo?
- 我下载并开始创作环境(crafter-cms-authoring.zip)
- 已创建由远程 git 存储库支持的站点,如以下所述:Create site based on a blueprint then push to remote bare git repository
- 创建了一个内容类型,新页面。
- 发布了所有内容
现在,我希望我可以在远程仓库中看到我的更改。但我所能看到的只是上面第 2. 步的初始提交。没有新的内容类型,没有新的页面,没有分支“直播”。 (但是内容项在本地存储库中可见)
缺少什么?
编辑:
由于Creafter可以通过多种方式设置,为了阐明我的部署场景,我添加了部署图+简短描述。
有 3 台主机 - 每个环境一台 + 共享 git 存储库。
创作
这是工作室所在的地方,内容作者进行更改。每个更改都保存到 sandbox
本地 git 存储库。发布内容时,更改会拉取到 published
本地 git 存储库。这两个本地存储库无法从其他主机访问。
送货
这就是提供发布内容到最后的内容 user/application。
Deployer
负责获取新发布到交付实例。它通过轮询(定期从)特定的 git 存储库来实现。当它提取新更改时,它会更新本地 git 存储库 site
和 Solr
索引。
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
我认为您可能将 push
与 publish
混淆了。
关于出版
在使内容上线的批准工作流之后,创作 (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
从交付访问。
如果我的理解是正确的,我可以立即想到两个解决方案。
- 在创作中设置一个 cron 作业以定期推送到 GitLab。
您需要在
published
中将 GitLab 添加为远程仓库,然后像这样设置一个 cron:
* * * * * git --git-dir /opt/crafter/data/repos/sites/{YOUR_SITE}/published/.git push 2>&1
先手动测试,然后 cron。
- 编写一个部署处理器,可以根据更改将内容推送到 end-point,或者等待票证:https://github.com/craftercms/craftercms/issues/2017。
构建完成后,您需要在 Authoring 中配置另一个将推送到 GitLab 的部署程序。
无论哪种情况,请注意不要在 GitLab 中更新内容,因为您使用的是 published
而不是 sandbox
。 (请参阅上面的 DevOps 说明以了解原因。)
- 我下载并开始创作环境(crafter-cms-authoring.zip)
- 已创建由远程 git 存储库支持的站点,如以下所述:Create site based on a blueprint then push to remote bare git repository
- 创建了一个内容类型,新页面。
- 发布了所有内容
现在,我希望我可以在远程仓库中看到我的更改。但我所能看到的只是上面第 2. 步的初始提交。没有新的内容类型,没有新的页面,没有分支“直播”。 (但是内容项在本地存储库中可见)
缺少什么?
编辑: 由于Creafter可以通过多种方式设置,为了阐明我的部署场景,我添加了部署图+简短描述。
创作
这是工作室所在的地方,内容作者进行更改。每个更改都保存到 sandbox
本地 git 存储库。发布内容时,更改会拉取到 published
本地 git 存储库。这两个本地存储库无法从其他主机访问。
送货
这就是提供发布内容到最后的内容 user/application。
Deployer
负责获取新发布到交付实例。它通过轮询(定期从)特定的 git 存储库来实现。当它提取新更改时,它会更新本地 git 存储库 site
和 Solr
索引。
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
我认为您可能将 push
与 publish
混淆了。
关于出版
在使内容上线的批准工作流之后,创作 (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
从交付访问。
如果我的理解是正确的,我可以立即想到两个解决方案。
- 在创作中设置一个 cron 作业以定期推送到 GitLab。
您需要在
published
中将 GitLab 添加为远程仓库,然后像这样设置一个 cron:
* * * * * git --git-dir /opt/crafter/data/repos/sites/{YOUR_SITE}/published/.git push 2>&1
先手动测试,然后 cron。
- 编写一个部署处理器,可以根据更改将内容推送到 end-point,或者等待票证:https://github.com/craftercms/craftercms/issues/2017。 构建完成后,您需要在 Authoring 中配置另一个将推送到 GitLab 的部署程序。
无论哪种情况,请注意不要在 GitLab 中更新内容,因为您使用的是 published
而不是 sandbox
。 (请参阅上面的 DevOps 说明以了解原因。)