是否可以使用持续集成技术开发sharepoint?

是否可以使用持续集成技术开发sharepoint?,sharepoint,build-process,continuous-integration,Sharepoint,Build Process,Continuous Integration,我们正在准备一些非常严肃的Sharepoint(MOSS 2007)开发,包括自定义web部件、列表、母版页和布局等 我们正在评估版本控制,而且讨论似乎没有比这更深入。我非常希望我们能够轻松地从源代码管理部署到测试和生产服务器,而只需尽可能少的人员接触,最好在每次签入后完全自动进行 我以前从未使用过CI,因此我觉得自己对Sharepoint的可行性以及过于复杂而不明智的方面有点无知 我担心,如果我们走上了一条太“简单”的道路,那么我们会很快后悔,因为在发布一些新功能后,我们不得不花半天时间来设置

我们正在准备一些非常严肃的Sharepoint(MOSS 2007)开发,包括自定义web部件、列表、母版页和布局等

我们正在评估版本控制,而且讨论似乎没有比这更深入。我非常希望我们能够轻松地从源代码管理部署到测试和生产服务器,而只需尽可能少的人员接触,最好在每次签入后完全自动进行

我以前从未使用过CI,因此我觉得自己对Sharepoint的可行性以及过于复杂而不明智的方面有点无知

我担心,如果我们走上了一条太“简单”的道路,那么我们会很快后悔,因为在发布一些新功能后,我们不得不花半天时间来设置每个环境

我甚至还没有开始在头脑中思考当用户添加的列表中有实际内容时会发生什么,以及这将如何影响我们在开发方面的工作


欢迎链接到博客/文档。个人经验非常受欢迎。

我最接近的经验是在一个用于构建发布解决方案的项目上。自定义生成操作允许我们从目标服务器删除sharepoint解决方案,安装新的解决方案并重置所需的应用程序池

建造花了一段时间,但效果很好。 我们没有使用此过程发布测试,但这是可能的

下面是一个目标文件的示例。不幸的是,这有点复杂

<?xml version="1.0" encoding="utf-8" ?>
<Project DefaultTargets="DebugBuild" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

  <PropertyGroup>
    <PackageName>MyFeatures.wsp</PackageName>
    <PackageFile>MyFeatures.wsp</PackageFile>
    <TargetUrl>http://intranet</TargetUrl>
    <ProjectDeploymentFilesFolder>DeploymentFiles</ProjectDeploymentFilesFolder>
    <ProjectRootFilesFolder>$(ProjectDir)\RootFiles</ProjectRootFilesFolder>
    <WssRootFilesFolder>$(ProgramFiles)\Common Files\Microsoft Shared\web server extensions\12</WssRootFilesFolder>
    <ReleaseFolder>$(SolutionDir)Deployment</ReleaseFolder>
    <MAKECAB>"C:\Windows\System32\makecab.exe"</MAKECAB>
    <STSADM>"$(ProgramFiles)\Common Files\Microsoft Shared\web server extensions\12\bin\stsadm.exe"</STSADM>
    <STSDEV>"$(SolutionDir)..\Tools\STSDev\stsdev.exe"</STSDEV>
    <GACUTIL>"C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\gacutil.exe"</GACUTIL>
    <IISAPP>cscript c:\windows\system32\iisapp.vbs</IISAPP>    
    <WARMUPSITE>"$(SolutionDir)..\Tools\WarmUpServer\AsyncWarmup.bat" "$(SolutionDir)..\Tools\WarmUpServer\"</WARMUPSITE>
    <TIMERJOBSRESTART>net stop SPTimerV3 &amp; net start SPTimerV3</TIMERJOBSRESTART>
  </PropertyGroup>

  <ItemGroup>
    <WSSSourceFiles Include="$(ProjectDir)\RootFiles\**\*.*" />
  </ItemGroup>  

<Target Name="DebugBuild">
  <Message Text="Refreshing Deployment Files..." Importance="high" />
  <Exec Command="$(STSDEV) /refresh $(TargetName) $(ProjectDir)" ContinueOnError="true" />
  <Message Text="Deleting Solution Package File..." Importance="high" />
  <Delete Files="$(ProjectDeploymentFilesFolder)\$(PackageFile)" ContinueOnError="true" />
  <Message Text="Building Solution Package (Debug Version)" Importance="high" />
  <Exec Command="$(MAKECAB) /F $(ProjectDir)\$(ProjectDeploymentFilesFolder)\SolutionPackage.ddf /D CabinetNameTemplate=$(PackageFile)" ContinueOnError="false" />
  <Message Text="" Importance="high" />
  <Message Text="Copying WSP file to CAB" Importance="high" />
  <Delete Files="$(ProjectDeploymentFilesFolder)\$(PackageFile).cab" ContinueOnError="true" />
  <Copy SourceFiles="$(ProjectDeploymentFilesFolder)\$(PackageFile)" DestinationFiles="$(ProjectDeploymentFilesFolder)\$(PackageFile).cab" SkipUnchangedFiles="false" />
  <Message Text="Copying WSP file to release folder: $(ReleaseFolder) from $(ProjectDeploymentFilesFolder)\$(PackageFile)" Importance="high" />
  <Exec Command="attrib -r &quot;$(ReleaseFolder)\$(PackageFile)&quot;" ContinueOnError="true"></Exec>
  <Delete Files="$(ReleaseFolder)\$(PackageFile)" ContinueOnError="true" />
  <Copy SourceFiles="$(ProjectDeploymentFilesFolder)\$(PackageFile)" DestinationFolder="$(ReleaseFolder)" SkipUnchangedFiles="false" />
  <Message Text="" Importance="high" />
</Target>

<Target Name="DebugInstall" DependsOnTargets="DebugBuild">
  <Message Text="Installing Solution..." Importance="high" />
  <Exec Command="$(STSADM) -o addsolution -filename $(ProjectDeploymentFilesFolder)\$(PackageFile)" ContinueOnError="true" />
  <Exec Command="$(STSADM) -o execadmsvcjobs" />
  <Message Text="" Importance="high" />
</Target>

<Target Name="DebugDeploy" DependsOnTargets="DebugInstall">
  <Message Text="Deploying Solution..." Importance="high" />
  <Exec Command="$(STSADM) -o deploysolution -name $(PackageName) -immediate -allowgacdeployment -url http://intranet" />
  <Exec Command="$(STSADM) -o execadmsvcjobs" />
  <Copy SourceFiles="$(TargetDir)$(TargetName).pdb" DestinationFolder="C:\WINDOWS\assembly\GAC_MSIL\MyFeatures\1.0.0.0__ce271be627d58c77" SkipUnchangedFiles="" />
  <Message Text="$(TargetDir)$(TargetName).pdb copied to GAC for debugging." Importance="high" />
  <Message Text="" Importance="high" />
</Target>

<Target Name="DebugDeployForce" DependsOnTargets="DebugInstall">
  <Message Text="Deploying Solution..." Importance="high" />
  <Exec Command="$(STSADM) -o deploysolution -name $(PackageName) -immediate -allowgacdeployment -url http://intranet -force" />
  <Exec Command="$(STSADM) -o execadmsvcjobs" />
  <Copy SourceFiles="$(TargetDir)$(TargetName).pdb" DestinationFolder="C:\WINDOWS\assembly\GAC_MSIL\MyFeatures\1.0.0.0__ce271be627d58c77" SkipUnchangedFiles="" />
  <Message Text="$(TargetDir)$(TargetName).pdb copied to GAC for debugging." Importance="high" />
  <Message Text="" Importance="high" />
</Target>

<Target Name="DebugRedeploy" >
  <Message Text="" Importance="high" />
  <Message Text="Starting sequence of Retract/Delete/Build/Install/Deploy" Importance="high" />
  <CallTarget Targets="DebugRetract" />
  <CallTarget Targets="DebugDelete" />
  <CallTarget Targets="DebugBuild" />
  <CallTarget Targets="DebugInstall" />
  <CallTarget Targets="DebugDeployForce" />
  <Message Text="" Importance="high" />
</Target>      

  <Target Name="DebugRetract" >
  <Message Text="Retracting Solution" />
  <Exec Command="$(STSADM) -o retractsolution -name $(PackageName) -immediate -url http://intranet" ContinueOnError="true" />
  <Exec Command="$(STSADM) -o execadmsvcjobs" />
  <Message Text="" Importance="high" />
</Target>

<Target Name="DebugDelete" DependsOnTargets="DebugRetract">
  <Message Text="Deleting Solution Package from Farm Solution Package Store" />
  <Exec Command="$(STSADM) -o deletesolution -name $(PackageName)" ContinueOnError="true" />
  <Exec Command="$(STSADM) -o execadmsvcjobs" />
  <Message Text="" Importance="high" />
</Target>

   </Project>

MyFeatures.wsp
MyFeatures.wsp
http://intranet
部署文件
$(ProjectDir)\RootFiles
$(程序文件)\Common Files\Microsoft共享\web服务器扩展\12
$(SolutionDir)部署
“C:\Windows\System32\makecab.exe”
“$(ProgramFiles)\Common Files\Microsoft Shared\web服务器扩展\12\bin\stsadm.exe”
“$(SolutionDir)…\Tools\STSDev\STSDev.exe”
“C:\Program Files\Microsoft SDK\Windows\v6.0A\bin\gacutil.exe”
cscript c:\windows\system32\iisapp.vbs
“$(SolutionDir)…\Tools\WarmUpServer\AsyncWarmup.bat”“$(SolutionDir)…\Tools\WarmUpServer\”
净停止时间SPTimerV3&;净启动SPTimerV3

看看Powershell。。。不幸的是,这是SharePoint的主要问题之一,即缺乏良好的开发和部署过程。一切都应该打包到解决方案中并通过powershell部署,powershell还可以管理任何信息清理。要升级版本,只需将解决方案部署为升级,并根据需要在应用程序中使用Powershell进行更新(如果您更新了版本号)。这是一个很大的额外工作,但工作得很好。在最近的一次升级中,我必须对两个web部件进行版本设置,然后使用powershell在我的所有~1500个站点中循环,删除旧的web部件并添加新的web部件


您应该开始开发一个强大的Powershell库,以执行强大的更新任务。

只有在使用功能和解决方案包(wsp)时才能使用SharePoint进行某种持续集成

您只需以某种方式将wsp与所有必要的文件/DLL和配置打包,然后部署它。部署后,您可以创建一个批处理脚本来自动重新激活所有功能

请注意,所有已自定义(未托管)的文件将不会更新。您必须确保重置站点定义(代码为“SPFile.RevertContentStream”)

祝你好运