当前位置: 动力学知识库 > 问答 > 编程问答 >

How can I set up continuous deployment for a SharePoint 2010 Visual Studio solution?

问题描述:

I want to automatically build .wsp packages and re-deploy them on a staging server after each commit. I know how to setup CruiseControl.Net for continuous integration, but I don't know how to build and deploy the packages. So far I got MSBuild to generate .wsp files , but I am struggling with a automatic re-deployment script. What I got so far is a PowerShell script:

param([string]$siteUrl = "http://machine.local")

$ErrorActionPreference = "Stop"

function WaitForPendingJob

{param ($sol)

$counter = 1

$sleeptime = 2

$safeguard = 100

while( $sol.JobExists -and ( $counter -lt $safeguard ) ) {

Write-Host -f yellow -NoNewLine "."

sleep $sleeptime

$counter++

}

Write-Host ""

}

function InstallOrUpdateSolution

{param ($SolutionWsp, $SiteUrl, $featureGuid)

$FullPath = resolve-path $SolutionWsp

$farm = Get-SPFarm

$sol = $farm.Solutions[$solutionWsp]

if ($sol)

{

Write-Host -f Green "Going to uninstall $SolutionWsp"

if( $sol.Deployed -eq $TRUE )

{

Write-Host -f Green "Deactivating feature $featureGuid at $SiteUrl"

Disable-SPFeature -Identity $featureGuid -Url $SiteUrl -Confirm:$false -force -ErrorAction Continue

Uninstall-SPSolution -Identity $SolutionWsp -WebApplication $SiteUrl -Confirm:$false -ErrorAction Continue

Write-Host -f yellow -NoNewLine "waiting for retraction"

WaitForPendingJob $sol

}

Write-Host -f Green "$SolutionWsp is retracted."

Write-Host -f Green "Going to Remove $SolutionWsp"

Remove-SPSolution -Identity $SolutionWsp -Force -Confirm:$false -ErrorAction Continue

Write-Host -f Green $SolutionWsp is deleted from this Farm

}

Add-SPSolution -LiteralPath $FullPath

Install-SPSolution -Identity $SolutionWsp -WebApplication $SiteUrl -GACDeployment -CASPolicies -Force

$sol = $farm.Solutions[$SolutionWsp]

if ($sol.Deployed -eq $false ) {

write-host -f yellow -NoNewLine "waiting for deployment"

WaitForPendingJob $sol

}

Write-Host -f Green $SolutionWsp deployed $sol.Deployed

Write-Host -f Green "Activating feature $SolutionWsp at $SiteUrl"

Enable-SPFeature -Identity $featureGuid -Url $SiteUrl

}

function RestartTimer

{

Write-Host -f Green Restarting OWSTIMER instances on Farm

$farm = Get-SPFarm

$farm.TimerService.Instances | foreach {$_.Stop();$_.Start();}

}

$date = Get-Date

Write-Host -f Green "Starting upgrade at " $date

Add-PsSnapin "Microsoft.SharePoint.PowerShell" -ErrorAction SilentlyContinue

InstallOrUpdateSolution "Solution1.wsp" $siteUrl "2c6ffaf7-84df-465c-be55-8136926d3e02"

InstallOrUpdateSolution "Solution2.wsp" $siteUrl "0c6be7af-cccd-4ccd-9b61-deffd16f7830"

InstallOrUpdateSolution "Solution3.wsp" $siteUrl "8f4862d3-94ea-467b-bdeb-2352295e08c3"

RestartTimer

$date = Get-Date

Write-Host -f Green "Upgrade finished at" $date

This breaks with seemingly random errors, while the deployment from Visual Studio 2010 works every time. How can I deploy the .wsp's from command line in a fail-proof way like the Visual Studio does it?

网友答案:

Why don't you just use Update-SPSolution instead of retract-delete-install-deploy sequence?

网友答案:

First of all, why are you over-complicating the deployment process by using PowerShell instead of stsadm in a batch file? Is there a need for PowerShell?

分享给朋友:
您可能感兴趣的文章:
随机阅读: