Whilst developing our new set of websites we have been using MSDeploy to package up the websites for deployment to test and production Azure accounts. These deployments were being triggered directly using Visual Studio. Now we know this is not best practice, you don’t want developers shipping to production from their development PCs, so I have been getting around to migrating these projects to Release Management.
I wanted to minimise change, as we like MSDeploy, I just wanted to pass the extra parameters to allow a remote deployment as opposed to a local one using the built in WebDeploy component in Release Management
To do this I created a new component based on the WebDeploy tool. I then altered the arguments to
__WebAppName__.deploy.cmd /y /m:__PublishUrl__" -allowUntrusted /u:"__PublishUser__" /p:"__PublishPassword__" /a:Basic
With these three extra publish parameters I can target the deployment to an Azure instance, assuming WebDeploy is installed on the VM running the Release Management deployment client.
The required values for these parameters can be obtained from the .PublishSettings you download from your Azure web site’s management page. If you open this file in a text editor you can read the values need (bits you need are highlighted in yellow)
<publishData><publishProfile profileName=”SomeSite – Web Deploy” publishMethod=”MSDeploy” publishUrl=”somesite.scm.azurewebsites.net:443” msdeploySite=”SomeSite” userName=”$SomeSite” userPWD=”m1234567890abcdefghijklmnopqrstu” destinationAppUrl=http://somesite.azurewebsites.net SQLServerDBConnectionString=”” mySQLDBConnectionString=”” hostingProviderForumLink=”” controlPanelLink=”http://windows.azure.com”><databases/></publishProfile><publishProfile profileName=”SomeSite- FTP” publishMethod=”FTP” publishUrl=ftp://site.ftp.azurewebsites.windows.net/site/wwwroot ftpPassiveMode=”True” userName=”SomeSite\$SomeSite” userPWD=”m1234567890abcdefghijklmnopqrstu” destinationAppUrl=http://somesite.azurewebsites.net SQLServerDBConnectionString=”” mySQLDBConnectionString=”” hostingProviderForumLink=”” controlPanelLink=”http://windows.azure.com”><databases/></publishProfile></publishData>
These values are used as follows
- WebAppName – This is the name of the MSDeploy package, this is exactly the same as a standard WebDeploy component.
- PublishUrl – We need to add the https and the .axd to the start and end of the url e.g: https://somesite.scm.azurewebsites.net:443/MsDeploy.axd
- PublishUser – e.g: $SomeSite
- PublishPassword – This is set as an encrypted parameter so it cannot be viewed in the Release Management client e.g: m1234567890abcdefghijklmnopqrstu
On top of these parameters, we can still pass in extra parameters to transform the web.config using the setparameters.xml file as detailed in this other post this allowing to complete the steps we need to do the configuration for the various environments in our pipeline.