After I posted Windows Azure Deployment – Problem and Solution in my blog last week, one of my blog readers emailed me if I have the full script.
Yes. I still have it but I stopped using Web Role and worker role because deploying web role or worker role takes so much time (around 20-40 min) which is unacceptable for us. Anyways, if 20-40 min deployment time is not your concern then sure, you can use it.
I wrote and tested this script with Azure SDK 2.1 on Windows 2012 server.
You can download it from my github repository as well. Here is the link https://github.com/michaelsync/Michael-Sync-s-blog-sample/blob/master/azure_deploy.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
| #Modified and simplified version of https://www.windowsazure.com/en-us/develop/net/common-tasks/continuous-delivery/
$thumbprint = '{Your Cert's Thumbprint }'
$myCert = Get-Item cert:\\CurrentUser\My\$thumbprint
$subscriptionId = '{ Your Subscription Id }'
$subscriptionName = '{ Your Subscription Name }'
$webroleservice = '{ Your Web Role Name }'
$workerroleservice = '{ Your Worker Role Name }'
$slot = 'staging' #staging or production
$package = '{ Path of your Azure project }\bin\Release\app.publish\ { Your Project }.cspkg'
$configuration = {Path of your Azure project}\bin\Release\app.publish\ServiceConfiguration.Cloud.cscfg'
$timeStampFormat = 'g'
Write-Output 'Running Azure Imports'
Import-Module 'C:\Program Files (x86)\Microsoft SDKs\Windows Azure\PowerShell\Azure\Azure.psd1'
Import-AzurePublishSettingsFile '{Path where you stored your azure setting\Azure.publishsettings'
function Publish() {
PublishInternal $webroleservice
PublishInternal $workerroleservice
}
function PublishInternal($service) {
Write-Output 'Publising'
Write-Output $service
Set-AzureSubscription -CurrentStorageAccount $service -SubscriptionName $subscriptionName -SubscriptionId $subscriptionId -Certificate $myCert
Write-Output 'Set-AzureSubscription'
$deploymentLabel = 'ContinuousDeploy to $service v%build.number%'
Write-Output $deploymentLabel
$deployment = Get-AzureDeployment -ServiceName $service -Slot $slot -ErrorVariable a -ErrorAction silentlycontinue
Write-Output a
if ($a[0] -ne $null) {
Write-Output '$(Get-Date -f $timeStampFormat) - No deployment is detected. Creating a new deployment. '
}
if ($deployment.Name -ne $null) {
#Update deployment inplace (usually faster, cheaper, won't destroy VIP)
Write-Output '$(Get-Date -f $timeStampFormat) - Deployment exists in $servicename. Upgrading deployment.'
UpgradeDeployment $service $deploymentLabel
} else {
CreateNewDeployment $service $deploymentLabel
}
}
function CreateNewDeployment($service, $deploymentLabel) {
write-progress -id 3 -activity 'Creating New Deployment' -Status 'In progress'
Write-Output '$(Get-Date -f $timeStampFormat) - Creating New Deployment: In progress'
$opstat = New-AzureDeployment -Slot $slot -Package $package -Configuration $configuration -label $deploymentLabel -ServiceName $service
$completeDeployment = Get-AzureDeployment -ServiceName $service -Slot $slot
$completeDeploymentID = $completeDeployment.deploymentid
write-progress -id 3 -activity 'Creating New Deployment' -completed -Status 'Complete'
Write-Output '$(Get-Date -f $timeStampFormat) - Creating New Deployment: Complete, Deployment ID: $completeDeploymentID'
}
function UpgradeDeployment($service, $deploymentLabel) {
write-progress -id 3 -activity 'Upgrading Deployment' -Status 'In progress'
Write-Output '$(Get-Date -f $timeStampFormat) - Upgrading Deployment: In progress'
# perform Update-Deployment
$setdeployment = Set-AzureDeployment -Upgrade -Slot $slot -Package $package -Configuration $configuration -label $deploymentLabel -ServiceName $service -Force
$completeDeployment = Get-AzureDeployment -ServiceName $service -Slot $slot
$completeDeploymentID = $completeDeployment.deploymentid
write-progress -id 3 -activity 'Upgrading Deployment' -completed -Status 'Complete'
Write-Output '$(Get-Date -f $timeStampFormat) - Upgrading Deployment: Complete, Deployment ID: $completeDeploymentID'
}
Write-Output 'Create Azure Deployment'
Publish
|
Here is the log for deploying webrole from Visual Studio.
New Deployment
10:56:32 PM – Warning: There are package validation warnings.
10:56:32 PM – Checking for Remote Desktop certificate...
10:56:33 PM – Uploading Certificates...
10:56:51 PM – Preparing deployment for MvcApplication1.Azure – 10/7/2013 10:56:06 PM with Subscription ID '1775dfasa8a81fd58' using Service Management URL 'https://management.core.windows.net/'...
10:56:51 PM – Connecting...
10:56:51 PM – Verifying storage account 'mymvctestx01'...
10:56:52 PM – Uploading Package...
11:04:04 PM – Creating...
11:04:54 PM – Created Deployment ID: 337b850dfa3c4dd38dd35441b5b8e337.
11:04:54 PM – Instance 0 of role MvcApplication1 is stopped
11:04:55 PM – Starting...
11:05:45 PM – Initializing...
11:05:45 PM – Instance 0 of role MvcApplication1 is creating the virtual machine
11:06:18 PM – Instance 0 of role MvcApplication1 is starting the virtual machine
11:07:57 PM – Instance 0 of role MvcApplication1 is busy
11:09:37 PM – Instance 0 of role MvcApplication1 is ready
11:09:37 PM – Created Website URL: http://mymvctestx01.cloudapp.net/
11:09:37 PM – Complete.
Upgrading
11:12:40 PM – Warning: There are package validation warnings.
11:12:40 PM – Checking for Remote Desktop certificate...
11:12:42 PM – Preparing deployment for MvcApplication1.Azure – 10/7/2013 11:12:14 PM with Subscription ID '17751asdfs8a81fd58' using Service Management URL 'https://management.core.windows.net/'...
11:12:42 PM – Connecting...
11:12:42 PM – Verifying storage account 'mymvctestx01'...
11:12:44 PM – Uploading Package...
11:20:08 PM – Updating...
11:23:19 PM – Instance 0 of role MvcApplication1 is ready
11:23:21 PM – Starting...
11:23:39 PM – Initializing...
11:23:40 PM – Created Website URL: http://mymvctestx01.cloudapp.net/
11:23:40 PM – Complete.
Generally, it takes around 10 to 20 mins but sometimes, it takes around 40 mins. I am not the only one who experienced this problem. You search about it online. Hope that Azure team will do something about it.