2007年10月29日,星期一

STSADM导出,内容部署,内容迁移API,功能/解决方案-比较部署选项

早在5月,我写了一篇标题为 的SharePoint部署选项:功能还是内容部署?,其中讨论了有关在SharePoint网站开发过程中将资产从开发转移到生产(或介于两者之间的环境)的“正确”方法的一些想法。现在,我从事其他项目并在每个项目上有意识地使用了不同的部署方法,我很快得出结论,部署的“正确”方法会因情况而异。因此,我认为可能有用的是对整个部署选项范围进行分析,并提供有助于您更轻松地决定如何完成此过程的关键步骤的信息。

因此,让我们看一下这些选项及其特征。顺便说一句,所有选项都不使用“破坏性同步”,其中 所有 导入之前先删除内容。

使用STSADM导出/导入

描述:

使用STSADM命令生成文件(导出),然后可以将其传输到目标以进行导入。将内容从一个地方移动到另一个地方的最简单方法之一,尽管不太可能适合作为连续部署机制。例子:

stsadm.exe -o导出-url http:// localhost-文件名C:\ Export.cab -includeusersecurity-版本4-覆盖

stsadm.exe -o导入-url http:// localhost / sites / newsite -文件名C:\ Export.cab -includeusersecurity

适用于:

  • 将整个站点/网站作为一个整体移动
  • 快速部署测试
  • 父网站(可以进入不同的网站集)

注意事项:

  • 目标上的内容将被覆盖(如果已存在)
  • 粒度仅限于网络
  • 对象GUID不会保留(因此某些事情将需要“修复”,例如,通过GUID引用列表的任何内容-ListViewWebPart,使用具有InfoPath表单的列表)
  • 不是备份/还原工具-尽管它是最类似于备份/还原的选项,但不会导出警报,审核跟踪,回收站项目,安全状态,工作流任务/状态之类的内容
  • 不交易

通过管理中心使用内容部署 *

描述:

通过Central Admin('/_admin/deployment.aspx')中的“内容部署路径和作业”进行配置。路径定义了源/目标和身份验证详细信息,特定的作业确切地定义了应部署的内容以及频率。快速部署功能允许具有权限的用户指定重要内容,这些内容应比管理员配置的现有作业计划更定期地部署(每15分钟部署一次快速部署项目)。

适用于:

  • 定期移动整个网站集/网站,例如在创作/制作或创作/登台/制作拓扑中
  • 仅部署增量更改,通过电子邮件通知成功/失败
  • 允许网站所有者通过“快速部署”对内容部署进行一些控制
  • 自动部署选择要部署的内容的依存关系,即使在不同的站点中(例如页面布局/内容类型/站点列/引用的图像等)
  • 自动将部署程序包传输到目标环境(通过HTTP [S])
  • 不交易

注意事项:

  • 目标上的内容将被覆盖(如果已存在)
  • 粒度仅限于网络
  • 网站内容(例如页面/图像)和网站“基础结构”(例如母版页,页面布局)之间没有区别
  • 对象GUID被保留
  • 空白网站模板应用于 来源和 目标网站集(请参阅 http://support.microsoft.com/kb/923592)
  • 也不是备份/还原工具(请参见上文)

使用内容迁移API *

涉及编写使用内容迁移API(称为PRIME)导出然后导入内容的代码-该API易于使用。

适用于:

  • 完全灵活的部署选项
  • 对部署内容进行细粒度控制(直至项目级别)
  • 保留对象GUID的能力(因此列表GUID不需要修复)
  • 能够选择安全性,版本控制和用户角色的选项

注意事项:

  • 空白网站模板应用于 来源和 目标网站集(请参阅 http://support.microsoft.com/kb/923592)
  • 不交易
  • 也不是备份/还原工具(请参见上文)
  • 需要开发技能才能编写代码

使用功能/解决方案

此博客的重点 几篇文章。涉及定义XML配置文件,SharePoint用来以正确的方式在目标上添加工件。这可能比仅在SharePoint Designer中进行开发要复杂得多,但可以在解决方案的整个生命周期中进行更好的管理。

适用于:

  • 迭代开发/部署
  • 部署程序集和文件系统文件(其他方法都不能解决此问题)
  • 能够使用解决方案包将程序集/文件系统文件部署到服务器场中的所有服务器
  • 持续整合的可能性

注意事项:

  • 开发人员负责评估和部署依赖项(例如基础内容类型)。
  • 通过功能部署的内容类型,列表定义,站点列等的更新必须使用API​​完成-修改原始功能文件,然后不支持重新配置
  • 由于缺乏当前工具的帮助,可能会非常耗时

* 有关使用Content Deployment或Content Migration API的一些其他说明:

-适当的功能将自动 活性 在目标上,但必须存在(即已安装)它们才能进行内容部署(目标首次启用时,不应在目标上启用N.B.发布功能)

-不应将带有RetainObjectIdentity选项的Content Deployment或内容迁移API与STSADM -export / import结合使用,因为后者将分配新的ID!

因此很明显,在选择如何进行项目部署时可以考虑几个方面。在很多情况下,功能/解决方案不是最合适的选择,我倾向于使用内容迁移API,这主要是因为其他任何选项都没有提供灵活性。当然,这的确意味着编写代码,但是正如我上次提到的那样,我将很快分享我编写的微型应用程序,因此您不必这样做!

一些有用的参考:

20条评论:

匿名 said...

To make 部署 easier than programming everything out with 特征 I had my hopes on 内容部署 and the PRIME api... but this post does not make me happy: http://www.bluedoglimited.com/SharePointThoughts/ViewPost.aspx?ID=278

罗宾·默瑞说过...

真正有用的队友!

Blogged you 在 http://glorix.blogspot.com/2007/10/some-good-read-aka-linklove.html

克里斯·奥'Brien说过...

@哔叽,

哇,莫里斯(Maurice)的帖子有相当严重的含义,我没看过。显然他是一个可靠的消息来源。

我也喜欢PRIME作为许多部署任务的解决方案。在我上一个项目中,它工作得很好,尽管我每次使用时都会密切注意任何问题。

我认为在此阶段它仍然存在于工具箱中。

干杯,

克里斯。

匿名 said...

关于大多数仅适用于空白网站模板的方法,这是什么意思?这是否意味着使用管理员部署选项和PRIME实际上完全没有用?

克里斯·奥'Brien说过...

不,这并不意味着-并且我认为该文章中存在一个不准确之处,可能使您认为:

-实际上,只有 目的地 网站集必须使用空白网站模板创建

您将看到我已经更新了文章,以删除上面的“源和目标”部分以反映这一点。

我最初给出此指导的原因是因为我已经看到PRIME的错误,该错误指出:

无法导入网站。导出的站点基于模板XYZ,但目标站点基于模板ABC。您只能将网站导入到与导出网站基于相同模板的网站中。

目的地必须位于空白站点模板上这一事实已广为人知,但是此错误使我认为来源也必须如此才能匹配。 然而,此后我发现此消息的措词略有不正确-如果使用(例如)发布模板创建源,但目标为空白,则不会发生该错误。

希望澄清一下,对原先的不准确性表示歉意。

克里斯。

匿名 said...

最后,解决!

现在可以通过MSFT CSS获得MOSS 2007内容部署QFE Pack:

http://harbar.net/archive/2008/05/21/MOSS-2007-Content-Deployment-QFE-Pack-Now-Available-via-MSFT.aspx

克里斯·奥'Brien说过...

的确是的,非常有兴趣了解这是否解决了/没有解决人们遇到的任何Content Deployment问题。

当然,上一轮的修补程序解决了我们遇到的问题,因此,这一轮有望带来进一步的健壮性。

克里斯。

匿名 said...

克里斯,
我的公司对在测试服务器上为特定组中的人创建“我的网站”进行了测试。现在,我们将那些“我的网站”移至生产服务器。我在文章和论坛上进行了研究,以找出最好的方法,最后决定使用stsadm导入/导出操作。您认为这是正确的方法吗?如果是,我应该一次导出和导入一个“我的网站”吗?
先感谢您。

克里斯·奥'Brien说过...

嗨,Eunice,

我没有测试过使用任何部署选项移动“我的网站”的情况,但我可以看到STSADM导出存在潜在问题。我的网站倾向于使用Web部件,这些Web部件通过其GUID引用列表-如果您使用STSADM导出进行部署,这将改变,这意味着列表将不再正确显示。

我不能保证它可以与“我的网站”一起使用,但是您可能想看看我的网站 内容部署向导 -这具有在整个环境中保留对象ID的选项,从而避免了该问题。

HTH,

克里斯。

马克说过...

Good post thanks 克里斯。 It made thing clearer to me. I blogged the post 在 my own blog http://www.information-worker.nl/post/Stsadm-export.aspx

圣 said...

克里斯,你好

将登台服务器数据与保护服务器数据同步的最佳方法是什么?我想配置登台服务器场,以便每周使用生产服务器上的新数据获取sycn。

谢谢,

克里斯·奥'Brien说过...

@San,

通常,听起来内容部署应该适合您-OOTB功能或与我的 内容部署向导实用程序 如果您需要比Web级别更精细的控制,则基于Content Migration API。

但是,请注意,如果您需要使用Content Deployment进行双向更新(例如,因为您也要从暂存到生产,那么CD并不是正确的选择。在这种情况下,我建议您寻找一种可以解决冲突的供应商解决方案请注意,这些解决方案比OOTB Content Deployment昂贵得多!当然,另一种方法是考虑您的需求。

HTH,

克里斯。

未知说过...

克里斯你好

公司重组后,我将一些内容复制到同一服务器场中的新网站集中'使用向导的专用内容数据库。现在我注意到一些页面由于引用GUID而损坏'不再符合预期的清单。我已经使用您的工具的v1.1完成了复制,但没有在方框中打钩"retain Object ID's"。这是因为我认为所有GUID'农场中使用的s应该是唯一的。还是仅将GUID排除在网站集/内容数据库中就可以了吗?如果是这样,我这次可以重新复制,在方框中打勾...

谢谢
巴里

米歇尔 said...

嗨,对于不熟悉sharepoint的用户。.对于他们,他们将为您推荐最佳的方式来部署Webparts

克里斯·奥'Brien说过...

@Michelle,

Web部件应始终与功能/解决方案一起部署。克里斯·约翰逊(Chris Johnson)有一个 涵盖整个过程的好帖子 -在SharePoint 2007中,大多数人选择使用 WSPBuilder 生成解决方案包。

HTH,

克里斯。

匿名 said...

根据您博客中的出色说明,我最近使用以下命令导出了一个共享站点:
stsadm.exe -o导出-url http://(站点集合A)-文件名C:\ Export.cab -includeusersecurity -versions 4

然后使用以下命令将其导入到位于http:// localhost的defaut Sharepoint发布页面下:-

stsadm.exe -o导入-url http:// localhost / sitecollectionA-文件名C:\ Export.cab -includeusersecurity

效果很好,并且确定有一个新选项卡随导入的网站集一起出现。现在在这里'是问题...。我进入了网站'Groups and People'我单击成员}新建以添加新成员。的'Add user'屏幕出现,我从AD添加了用户。在“授予权限”部分中,有两个选项:
1. 添加用户s to sharepoint group
2.直接授予用户权限
问题是每个组在选项一状态(没有访问权限)的方括号(例如,家庭成员(无访问权限))和第二个选项中'直接授予用户权限完全变灰且不可选择。

r00ts

克里斯·奥'Brien说过...

@ r00ts,

对不起'我不知道为什么会这样。

克里斯。

匿名 said...

我已经将内容从dev部署到prod服务器。一切看起来都很好,但是没有复制我的用户权限,因此我收到对已部署站点的拒绝访问错误。任何adea如何去爱它?

克里斯·奥'Brien说过...

@匿名,

你没有'不要说您用来移动内容的部署方法,但是如果有的话'您可以使用STSADM导出/导入或某种形式的内容部署'需要确保在导出和导入上都设置了IncludeSecurity。

HTH,

克里斯。

匿名 said...

使用PowerShell将站点从一个场迁移到另一个场时遇到问题。来到这篇文章,并使用STSADM使用了您的建议,站点迁移工作正常。