Last active
October 29, 2020 14:59
-
-
Save sbarski/fc7a1a256012cc66b0e5 to your computer and use it in GitHub Desktop.
Revisions
-
sbarski renamed this gist
Jan 7, 2015 . 1 changed file with 0 additions and 0 deletions.There are no files selected for viewing
File renamed without changes. -
sbarski created this gist
Jan 7, 2015 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,138 @@ param([string]$publishSettingsFileLocation, [string]$azureSubscriptionName, [string]$storageAccount, [string]$packagePath, [string]$packageName, [string]$containerName, [string]$serviceName, [string]$configPath, [Int32]$instancePollLimit = 1200, [Int32]$instancePollRate = 60, [string]$removeStagingInstance) #The old publish settings file - use Get-AzurePublishSettingsFile to https://windows.azure.com/download/publishprofile.aspx to get the file Write-Host "publishSettingsFileLocation is $publishSettingsFileLocation" #The azure subscription name related to the account, eg. "Window Azure MSDN - Visual Studio Premium" Write-Host "azureSubscriptionName is $azureSubscriptionName" #The storage account where to upload the package. It must exist. E.g. mystorageaccountforupload Write-Host "storageAccount is $storageAccount" #Path to the package, e.g. c:\backend\src\MicroWatch.Web.Azure\bin\Staging\app.publish\MicroWatch.Web.Azure.cspkg Write-Host "packagePath is $packagePath" #Package Name for creating nice uploads, e.g. MicroWatch.Web.Azure Write-Host "packageName is $packageName" #Container name for the blob. It will be created if it doesn't exist. E.g. myuploadcontainer Write-Host "containerName is $containerName" #The cloud service name we are uploading to. E.g. mycloudservice Write-Host "serviceName is $serviceName" #Path to the cscfg, e.g. backend\src\MicroWatch.Web.Azure\bin\Staging\app.publish\ServiceConfiguration.Staging.cscfg Write-Host "configPath is $configPath" #How long we shall poll to check the status of the workers in seconds. Default is 20 minutes (1200 seconds). Write-Host "instancePollLimit is $instancePollLimit" #How often should we do the polling. Default is 60 seconds. Write-Host "instancePollRate is $instancePollRate" #Should we remove staging after the upload is completed. Default is True. Write-Host "removeStagingInstance is $removeStagingInstance" Write-Host "Import-AzurePublishSettingsFile - $publishSettingsFileLocation" Import-AzurePublishSettingsFile $publishSettingsFileLocation Write-Host "Select AzureSubscription" Select-AzureSubscription $azureSubscriptionName Write-Host "Select AzureSubscription - Completed" Write-Host "Set AzureSubscription" Set-AzureSubscription -SubscriptionName $azureSubscriptionName -CurrentStorageAccount $storageAccount #"microwatchstaging" Write-Host "Set AzureSubscription - Completed" Write-Host "Upload a compiled package" $fullTargetPackageName = "$packageName.$(get-date -f yyyy_MM_dd_hh_ss).cspkg" $container = Get-AzureStorageContainer -Name $containerName -ErrorAction SilentlyContinue if(!$container){ New-AzureStorageContainer -Name $containerName } Set-AzureStorageBlobContent -File $packagePath -Container $containerName -Blob $fullTargetPackageName -Force Write-Host "Upload of the package is done" $blobInfo = Get-AzureStorageBlob -Container $containerName -blob $fullTargetPackageName $packageUri = $blobInfo.ICloudBlob.Uri Write-Host "Package Uri is $packageUri" Write-Host "Creating a New Package Deployment" $deployment = Get-AzureDeployment -ServiceName $serviceName -Slot Staging ` -ErrorAction SilentlyContinue if($deployment.name -ne $null){ Remove-AzureDeployment -ServiceName $serviceName -Slot Staging -Force } New-AzureDeployment -ServiceName $serviceName -Slot Staging -Package $packageUri -Configuration $configPath -TreatWarningsAsError Write-Host "New Package Deployment Done" Write-Host "Wait for all instances to settle" $statusReady = "ReadyRole" $statusStopped = "StoppedVM" function Get-AllInstancesAreStatus($instances, $targetStatus){ foreach ($instance in $instances) { if ($instance.InstanceStatus -ne $targetStatus) { return $false } } return $true } Write-Host "All instances are ready" Write-Host "Getting ready to run" $deployment = Get-AzureDeployment -ServiceName $serviceName -Slot Staging $waitTime = [System.Diagnostics.Stopwatch]::StartNew() while ((Get-AllInstancesAreStatus $deployment.RoleInstanceList $statusReady) -eq $false) { if($waitTime.Elapsed.TotalSeconds -gt $instancePollLimit){ Throw "$instancePollLimit seconds elapsed without all the instances reaching 'ReadyRun'" } Start-Sleep -Seconds $instancePollRate $deployment = Get-AzureDeployment -ServiceName $serviceName -Slot Staging } Write-Host "Instance is ready to run" Write-Host "Promote the new deployment to Production, Suspend the old one" Move-AzureDeployment -ServiceName $serviceName $deployment = Get-AzureDeployment -ServiceName $serviceName -Slot Staging ` -ErrorAction SilentlyContinue if($deployment.DeploymentName -ne $null){ Set-AzureDeployment -Status -ServiceName $serviceName -Slot Staging -NewStatus Suspended } if([System.Convert]::ToBoolean($removeStagingInstance)) { Write-Host "Removing Staging Instance" Remove-AzureDeployment -ServiceName $serviceName -Slot Staging -Force } Write-Host "Deployment Done - Everything is ready"