一个实时Sitecore网站的Git源代码控制策略



首先,我为这个问题的规模而道歉,因为我确信我的建议在实施方面是一个"大问题",可能本身就有三到四个独立的问题。如果不是迫切需要帮助,我是不会开口的。

我被赋予了一项艰巨的任务,即修改我公司有关在线工作的风险管理程序。

由于我们没有备份,也没有保护我们的数据,我决定,就像任何参与专业编程的人应该已经做的那样,我们将通过源代码控制来保护我们的工作。我目前是在本地使用Git完成这些工作的,但其他人不使用源代码控制,最终我们失去了源代码控制提供的很多好处。我宁愿我们有一个系统,每个人都使用Git,并让它执行规则,如果它不在源代码控制中,它就不会留下来。显然,我们需要一个备份计划,但作为一个开发人员,我认为首先要做的是在得到备份解决方案之前整理代码方面的事情-显然,任何关于这方面的建议也是非常受欢迎的。

我们运行ASP。. NET网站与SQL Server 2005后端,运行Sitecore作为我们选择的CMS。在理想的情况下,我希望这个CMS站点的所有变化部分都在源代码控制下,包括数据库。

目前,我知道这不是最好的主意,我运行一个解决方案的所有子布局内置在Sitecore。这是在源代码控制之下,多亏了Git,我可以轻松地添加分支、发布新功能和修复bug(使用Git-flow作为我的工作流解决方案)。我对Git还很陌生,所以除了提交、忽略某些文件等之外,我还没有管理过太复杂的东西。

在此之上,我还想使用源代码控制来获得源代码控制下的数据库内容。据我所知,您可以将Sitecore内容项序列化为文件系统中的巨大树(如果我没记错的话,保存为.item文件)。如果这是理想的解决方案,我也希望将它们添加到源代码控制中,尽管我不知道它们将保存在文件系统中的确切位置。我的文件系统现在是这样的:

- Data      (Logs, indexes, etc - is this needed to be in source control?)
- Source    (Helper files, although occasionally modified)
- Website   (Containing all the files I edit, and other essential Sitecore stuff)

如前所述,我当前的存储库仅在我的系统上,它由一个解决方案文件夹组成,其中包含一堆.ascx, . asx .cs, . asx .cs.designer和一两个奇怪的。aspx文件。这让我上传的时候更容易,比如用

我想输入的是管理所有开发人员的理想方式。尽管使用了DVCS,但我更喜欢将实时服务器视为主要存储库,让所有其他开发人员都可以从中进行推送和拉取。我们将使用git-flow工作流解决方案,因为它非常符合我们的开发方式。显然,我担心的是,如何在不破坏这个目前非常昂贵、高流量的网站的情况下,正确地设置它,而服务器上没有备份。

关于服务器上有多少数据应该放在存储库中,如何处理Sitecore中序列化的数据,以及如何使用源代码控制本身作为备份到单独存储库的一种方式,这些方面的提示和建议将受到欢迎。这是我第一次为一个实时网站建立一个源代码控制系统/工作流程,所以任何指导和建议对我来说是最好的事情,我将非常感激。

编辑:我打算在这上面放一个赏金,试图得到更多关于人们如何使用Git处理Sitecore的指南。

澄清我自己,我不是在寻找一种方法来备份我的工作,而是一种方法,使许多开发人员可以在它上工作,并确保网站上的代码是最新的中央存储库。例如,我之前提到过,我将使用git-flow来管理我的工作流程。原始仓库将存在于一个共享的服务器上(很可能是一个测试环境),并且所有的开发人员都将拥有该服务器的克隆来进行工作和推送。从这里开始,我希望能够将更改从共享驱动器上的原始repo推送到活动服务器,并在发现错误时再次返回。我还想在我的仓库中包括序列化的内容项。

查看刺猬团队开发解决方案(3.0是最新版本)。当与Visual Studio, Sitecore Rocks, Team City(或其他构建服务器)一起使用时,它可以满足您的许多需求。详情请访问http://hhogdev.com/

修改后的答案:

好的,等我们从你那里得到更多的背景信息后,让我扩展一下我最初的想法。既然你说你只有一次Sitecore许可证,不能有一个单独的测试服务器等,我们总是可以稍微修改一下,仍然达到同样的效果。

如果在同一台服务器上有几个存储库运行实时Sitecore怎么办?如果你可以将Sitecore设置为在同一文件系统上使用不同的根/存储库,例如,将url更改为http://yoursite.com/blahblah/test以在测试模式下运行Sitecore。当然,这取决于您拥有的许可证类型,也就是说,如果它绑定到特定的机器上。无论如何,这样你就可以在另一个分支上测试你的站点(例如,在测试存储库中的开发分支),然后再将这些东西合并到master中并让它运行。

所以你可以在服务器上有一个裸存储库,每个人都从那里推送和拉取。您可以在同一台服务器上拥有两个额外的非裸存储库,其中一个与主分支签出,另一个与开发分支签出。如果你想在Sitecore站点的测试版本上测试新功能,通过ssh登录你可以很容易地在测试存储库中运行"git pull"。当你对这些变化感到满意时,合并到master并推送到裸repo上的master,并以同样的方式更新live repo。

我认为你需要试着找到一种方法,让你的网站有两个版本,这样你就可以在它们上线之前测试这些变化。


原始文章:

我强烈建议你把实时服务器和你正在做的事情分开,也就是说,另一个存储库,你也可以把你的工作推送(并从中拉取),作为一个集成存储库。通过这种方式,您可以在将代码推送到活动服务器之前集成代码并在本地(您的组织的本地)进行测试,因此不会有人意外地将代码/数据库/任何东西直接推送到活动服务器。

我还建议您为中央存储库备份数据,换句话说,git应该用作版本控制系统,而不是用作备份系统。甚至git也可能失败并导致存储库损坏,然后如果你没有任何备份,你就会被熏死。

此外,如果可能的话,尝试将实际站点内容与数据上的逻辑工作分开,即尝试保持良好的模型/视图概念。通过这种方式,您可以轻松地使用独立于代码的测试数据库设置测试环境,并且不需要提交数据库。当然,除非你真的想提交它们:)

当我退后一步,试图看看你在做什么时,它是在管理失去业务连续性的风险。例:如果你的站点宕机了,理想情况下你会希望能够使用你的备份完全自动恢复站点。

数据存储并不昂贵。真的,它不是。即使你有一个庞大的数据集。因此,要求所有开发人员都使用git是一个好主意。许多组织设置了一个单独的git服务器,您只需向该服务器推送/拉取即可。如果您的解决方案具有良好且完整的测试,那么您将很快知道代码合并是否破坏了软件。如果没有,你可能应该使用一个git中央服务器供开发人员推送/拉取,然后使用一个单独的发布集成服务器,使用"git fetch"进行合并;从中央服务器测试更改。

您已经概述了解决方案的各种组件,例如备份代码、数据、数据库、CMS条目等。但是,您应该问的总体问题是,您是否已经收集了足够的东西,能够仅从备份中完全激活您的站点。如果你做不到,那说明你做得还不够。如果你能做到这一点,你已经做得够多了。

在许可证问题上,你需要一个更好的许可证。向Sitecore的所有者申请测试服务器的许可证,并告诉他们这是用于测试服务器的许可证。一个好的供应商会意识到,如果他们以这种方式帮助你,你更有可能续订你的订阅。或者,向财务人员申请另一个Sitecore许可证。如果您的基于sitecore的CMS站点对您的公司来说是一个很好的工具,那么另一个许可证不会改变这种好处。

我花了一个小时来了解Sitecore(在今天之前从未听说过它,很酷的工具),我想我明白你想要做什么。我是这样做的:

  1. 在Linux机器上安装一个受祝福的裸repo(物理的或虚拟的,不重要)
  2. 在生产环境中初始化一个git repo,在所有源代码、配置文件和数据都可以添加到repo的基本文件夹中。(记住要设置user.name和user.name。电子邮件,将识别系统管理员负责生产更新。)
  3. 为每个模式创建一个SQL Server转储文件,并将所有转储文件放在本地生产库中一个特殊标记的文件夹中。
  4. Stage所有文件(git add --all),并提交"Initial commit, version X.Y.Z"注释,其中版本号是您认为当前部署的任何版本。
  5. Push to the blessed repo
  6. 在所有开发环境中克隆祝福的repo。(再次记住设置user.name和user。)

注意步骤3,其中创建SQL Server转储并将其添加到repo。这将允许您回滚对数据库的任何未来更改。请记住,每次进行更改时都需要生成新的转储,但仅针对实际更改的模式。序列化需要序列化的内容,并在模式更改时提交新的序列化。这样,您只需要git revert {commit_hash}就可以恢复这些特定的更改(当然,不要忘记恢复数据库)。

我希望这能直接或间接地帮助你。

p。S:我不知道你们的数据库结构;如果将配置存储在与用户数据相同的模式中,则肯定会使事情变得复杂,因为您无法仅恢复以前的转储而不丢失新的(可能很重要的)用户数据。我已经习惯了Ruby on Rails,它的模式修订都是针对升级和降级进行编码的;我希望您的框架提供类似的功能。

最新更新