3

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?

Community
  • 1
  • 1
skolima
  • 31,963
  • 27
  • 115
  • 151

2 Answers2

1

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

  • From MSDN: "The Update-SPSolution cmdlet upgrades a deployed SharePoint solution in the farm. Use this cmdlet only if a new solution contains the same set of files and features as the deployed solution. If files and features are different, the solution must be retracted and redeployed by using the Uninstall-SPSolution and Install-SPSolution cmdlets, respectively." I am afraid this would fail if I add some resource files. – skolima Dec 14 '10 at 07:08
  • It wouldn't fail, to actually deploy the resources (that are not in the layouts folder) to the sites using the feature you would only need to deactivate and reactivate the feature – Colin Jan 14 '11 at 10:59
-1

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?

Ajay Nayak
  • 229
  • 1
  • 3
  • This is not on topic, I know how to setup CI, it's the deployment part I am having problems with. – skolima Oct 20 '10 at 12:55