209 lines
6.4 KiB
PowerShell
209 lines
6.4 KiB
PowerShell
#Requires -Version 3.0
|
|
|
|
<#
|
|
.SYNOPSIS
|
|
Creates and deploys a Microsoft Azure Website for a Visual Studio web project.
|
|
For more detailed documentation go to: http://go.microsoft.com/fwlink/?LinkID=394471
|
|
|
|
.EXAMPLE
|
|
PS C:\> .\Publish-WebApplicationWebSite.ps1 `
|
|
-Configuration .\Configurations\WebApplication1-WAWS-dev.json `
|
|
-WebDeployPackage ..\WebApplication1\WebApplication1.zip `
|
|
-Verbose
|
|
|
|
#>
|
|
[CmdletBinding(HelpUri = 'http://go.microsoft.com/fwlink/?LinkID=391696')]
|
|
param
|
|
(
|
|
[Parameter(Mandatory = $true)]
|
|
[ValidateScript({Test-Path $_ -PathType Leaf})]
|
|
[String]
|
|
$Configuration,
|
|
|
|
[Parameter(Mandatory = $false)]
|
|
[String]
|
|
$SubscriptionName,
|
|
|
|
[Parameter(Mandatory = $false)]
|
|
[ValidateScript({Test-Path $_ -PathType Leaf})]
|
|
[String]
|
|
$WebDeployPackage,
|
|
|
|
[Parameter(Mandatory = $false)]
|
|
[ValidateScript({ !($_ | Where-Object { !$_.Contains('Name') -or !$_.Contains('Password')}) })]
|
|
[Hashtable[]]
|
|
$DatabaseServerPassword,
|
|
|
|
[Parameter(Mandatory = $false)]
|
|
[Switch]
|
|
$SendHostMessagesToOutput = $false
|
|
)
|
|
|
|
|
|
function New-WebDeployPackage
|
|
{
|
|
#Write a function to build and package your web application
|
|
|
|
#To build your web application, use MsBuild.exe. For help, see MSBuild Command-Line Reference at: http://go.microsoft.com/fwlink/?LinkId=391339
|
|
}
|
|
|
|
function Test-WebApplication
|
|
{
|
|
#Edit this function to run unit tests on your web application
|
|
|
|
#Write a function to run unit tests on your web application, use VSTest.Console.exe. For help, see VSTest.Console Command-Line Reference at http://go.microsoft.com/fwlink/?LinkId=391340
|
|
}
|
|
|
|
function New-AzureWebApplicationWebsiteEnvironment
|
|
{
|
|
[CmdletBinding()]
|
|
param
|
|
(
|
|
[Parameter(Mandatory = $true)]
|
|
[Object]
|
|
$Configuration,
|
|
|
|
[Parameter (Mandatory = $false)]
|
|
[AllowNull()]
|
|
[Hashtable[]]
|
|
$DatabaseServerPassword
|
|
)
|
|
|
|
Add-AzureWebsite -Name $Config.name -Location $Config.location | Out-String | Write-HostWithTime
|
|
# Create the SQL databases. The connection string is used for deployment.
|
|
$connectionString = New-Object -TypeName Hashtable
|
|
|
|
if ($Config.Contains('databases'))
|
|
{
|
|
@($Config.databases) |
|
|
Where-Object {$_.connectionStringName -ne ''} |
|
|
Add-AzureSQLDatabases -DatabaseServerPassword $DatabaseServerPassword -CreateDatabase |
|
|
ForEach-Object { $connectionString.Add($_.Name, $_.ConnectionString) }
|
|
}
|
|
|
|
return @{ConnectionString = $connectionString}
|
|
}
|
|
|
|
function Publish-AzureWebApplicationToWebsite
|
|
{
|
|
[CmdletBinding()]
|
|
param
|
|
(
|
|
[Parameter(Mandatory = $true)]
|
|
[Object]
|
|
$Configuration,
|
|
|
|
[Parameter(Mandatory = $false)]
|
|
[AllowNull()]
|
|
[Hashtable]
|
|
$ConnectionString,
|
|
|
|
[Parameter(Mandatory = $true)]
|
|
[ValidateScript({Test-Path $_ -PathType Leaf})]
|
|
[String]
|
|
$WebDeployPackage
|
|
)
|
|
|
|
if ($ConnectionString -and $ConnectionString.Count -gt 0)
|
|
{
|
|
Publish-AzureWebsiteProject `
|
|
-Name $Config.name `
|
|
-Package $WebDeployPackage `
|
|
-ConnectionString $ConnectionString
|
|
}
|
|
else
|
|
{
|
|
Publish-AzureWebsiteProject `
|
|
-Name $Config.name `
|
|
-Package $WebDeployPackage
|
|
}
|
|
}
|
|
|
|
|
|
# Script main routine
|
|
Set-StrictMode -Version 3
|
|
|
|
Remove-Module AzureWebSitePublishModule -ErrorAction SilentlyContinue
|
|
$scriptDirectory = Split-Path -Parent $PSCmdlet.MyInvocation.MyCommand.Definition
|
|
Import-Module ($scriptDirectory + '\AzureWebSitePublishModule.psm1') -Scope Local -Verbose:$false
|
|
|
|
New-Variable -Name VMWebDeployWaitTime -Value 30 -Option Constant -Scope Script
|
|
New-Variable -Name AzureWebAppPublishOutput -Value @() -Scope Global -Force
|
|
New-Variable -Name SendHostMessagesToOutput -Value $SendHostMessagesToOutput -Scope Global -Force
|
|
|
|
try
|
|
{
|
|
$originalErrorActionPreference = $Global:ErrorActionPreference
|
|
$originalVerbosePreference = $Global:VerbosePreference
|
|
|
|
if ($PSBoundParameters['Verbose'])
|
|
{
|
|
$Global:VerbosePreference = 'Continue'
|
|
}
|
|
|
|
$scriptName = $MyInvocation.MyCommand.Name + ':'
|
|
|
|
Write-VerboseWithTime ($scriptName + ' Start')
|
|
|
|
$Global:ErrorActionPreference = 'Stop'
|
|
Write-VerboseWithTime ('{0} $ErrorActionPreference is set to {1}' -f $scriptName, $ErrorActionPreference)
|
|
|
|
Write-Debug ('{0}: $PSCmdlet.ParameterSetName = {1}' -f $scriptName, $PSCmdlet.ParameterSetName)
|
|
|
|
# Save the current subscription. It will be restored to Current status later in the script
|
|
Backup-Subscription -UserSpecifiedSubscription $SubscriptionName
|
|
|
|
# Verify that you have the Azure module, Version 0.7.4 or later.
|
|
if (-not (Test-AzureModule))
|
|
{
|
|
throw 'You have an outdated version of Microsoft Azure PowerShell. To install the latest version, go to http://go.microsoft.com/fwlink/?LinkID=320552 .'
|
|
}
|
|
|
|
if ($SubscriptionName)
|
|
{
|
|
|
|
# If you provided a subscription name, verify that the subscription exists in your account.
|
|
if (!(Get-AzureSubscription -SubscriptionName $SubscriptionName))
|
|
{
|
|
throw ("{0}: Cannot find the subscription name $SubscriptionName" -f $scriptName)
|
|
|
|
}
|
|
|
|
# Set the specified subscription to current.
|
|
Select-AzureSubscription -SubscriptionName $SubscriptionName | Out-Null
|
|
|
|
Write-VerboseWithTime ('{0}: Subscription is set to {1}' -f $scriptName, $SubscriptionName)
|
|
}
|
|
|
|
$Config = Read-ConfigFile $Configuration
|
|
|
|
#Build and package your web application
|
|
New-WebDeployPackage
|
|
|
|
#Run unit tests on your web application
|
|
Test-WebApplication
|
|
|
|
#Create Azure environment described in the JSON configuration file
|
|
$newEnvironmentResult = New-AzureWebApplicationWebsiteEnvironment -Configuration $Config -DatabaseServerPassword $DatabaseServerPassword
|
|
|
|
#Deploy Web Application package if $WebDeployPackage is specified by the user
|
|
if($WebDeployPackage)
|
|
{
|
|
Publish-AzureWebApplicationToWebsite `
|
|
-Configuration $Config `
|
|
-ConnectionString $newEnvironmentResult.ConnectionString `
|
|
-WebDeployPackage $WebDeployPackage
|
|
}
|
|
}
|
|
finally
|
|
{
|
|
$Global:ErrorActionPreference = $originalErrorActionPreference
|
|
$Global:VerbosePreference = $originalVerbosePreference
|
|
|
|
# Restore the original current subscription to Current status
|
|
Restore-Subscription
|
|
|
|
Write-Output $Global:AzureWebAppPublishOutput
|
|
$Global:AzureWebAppPublishOutput = @()
|
|
}
|