2009-02-12 12 views
6

Jesteśmy szykuje się do jakiegoś bardzo poważnego Sharepoint (MOSS 2007) rozwój w tym niestandardowych części internetowych, list, stron wzorcowych i układów itp itp itpCzy można rozwijać program SharePoint przy użyciu technik ciągłej integracji?

Jesteśmy oceny kontroli wersji i wydaje się, że dyskusja nie ma znacznie głębiej. Cieszę się, że możemy łatwo wdrożyć kontrolę ze źródła na nasze serwery testowe i produkcyjne przy jak najmniejszym kontakcie z człowiekiem, a najlepiej całkowicie automatycznie po każdej kontroli.

Nie pracowałem z wykorzystaniem CI przed i tak czuję się trochę nieświadomego tego, co jest możliwe z Sharepointem, a co zbyt skomplikowane, aby było rozsądne.

Obawiam się, że jeśli wyruszymy w drogę zbyt "łatwą", to bardzo szybko będziemy żałować, gdy będziemy musieli spędzić pół dnia na konfigurowaniu każdego środowiska po wydaniu kilku nowych funkcji.

Nie zacząłem nawet zastanawiać się nad tym, co dzieje się, gdy zawartość list jest dodawana przez użytkowników i jak to wpłynie na to, co robimy po stronie programistów.

Linki do blogów/dokumentacji są mile widziane. Osobiste doświadczenia BARDZO mile widziane.

Odpowiedz

5

Najbliższe moje doświadczenie dotyczy projektu, który używał STSDEV do budowania rozwiązań do wydania. Niestandardowe działania kompilacji pozwoliły nam usunąć rozwiązanie sharepoint z serwera docelowego, zainstalować nowe rozwiązania i zresetować wymagane pule aplikacji.

Trochę czasu zajęło zbudowanie, ale działało dobrze. Nie udostępniliśmy do przetestowania przy użyciu tego procesu, ale może być to możliwe.

Oto przykład pliku celów. Niestety jest to nieco skomplikowane.

<?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> 
3

Spójrz PowerShell ... niestety jest to jedna z głównych bolączek z SharePoint jest brak dobrego procesu opracowywania i wdrażania. Wszystko powinno być spakowane w rozwiązania i wdrażane przez powershell, powershell może również zarządzać każdym czyszczeniem informacji. Do wersji po prostu wdrażaj rozwiązania jako aktualizację i używaj Powershell do aktualizacji w swoich aplikacjach (jeśli zaktualizujesz swój numer wersji). To dużo dodatkowej pracy, ale działa wystarczająco dobrze. W ostatnim uaktualnieniu miałem do wersji dwie części webowe, a następnie użyłem powershell do przechodzenia przez wszystkie ~ 1500 moich stron, usuwając stare części internetowe i dodając je w nowych.

Podczas pracy należy zacząć tworzyć silną bibliotekę Powershell, aby wykonywać zaawansowane zadania aktualizacji.

1

Jedyną pracą z SharePoint była stała integracja podczas pracy z funkcjami i pakietami rozwiązań (wsp).

Trzeba tylko jakoś skompletować swój wsp z wszystkimi niezbędnymi plikami/bibliotekami DLL i konfiguracją, a następnie wdrożyć. Po wdrożeniu możesz utworzyć skrypt wsadowy, aby automatycznie ponownie aktywować wszystkie funkcje.

Należy pamiętać, że wszystkie pliki, które zostały dostosowane (niehostowane) NIE zostaną zaktualizowane. Musisz upewnić się, że zresetowałeś definicję strony (według kodu to "SPFile.RevertContentStream").

Powodzenia!

Powiązane problemy