First things first - create PowerShell script
myapp.build.ps1 to build your app:
mdbuild.exe myapp.web.csproj ` /p:Configuration="Debug" ` /p:BuildProjectReferences=true ` /T:Package ` /p:OutDir="c:/build/myapp"
Please note that you should be building
.csproj file, NOT
.sln. Once your build is finished it should produce a deployment package, which is basically a zip file with your application binaries and other stuff.
msdeploy.exe is simple once you know how to do it. Create a
myapp.deploy.ps1 which will deploy your web app:
$scriptpath = $MyInvocation.MyCommand.Path $dir = Split-Path $scriptpath msdeploy.exe ` -verb:sync ` -source:package="c:/build/myapp/\_PublishedWebsites/myapp.web_Package/myapp.web.zip" ` -dest:'auto,computerName="https://myapp.scm.azurewebsites.net:443/msdeploy.axd?site=myapp",userName="$myapp",password="mypassword",authtype="Basic",includeAcls="False"' ` -disableLink:AppPoolExtension ` -disableLink:ContentExtension ` -disableLink:CertificateExtension ` -setParamFile:"$dir\example.com.SetParameters.xml"
example.com.SetParameters.xml file in the same folder and configure all required
web.config parameters in it. These parameters will be used for the
web.config transform when deploying.
<?xml version="1.0" encoding="utf-8"?> <parameters> <setParameter name="IIS Web Application Name" value="myapp" /> <setParameter name="myappdb-Web.config Connection String" value="Data Source=tcp:abcdefg.database.windows.net,1433;Initial Catalog=myappdb;User Id=admin@abcdefg;Password=mydbpassword;" /> </parameters>
Hook it up with Bamboo
Before starting the
msbuild, we want to make sure that all NuGet packages are restored. Normally this step is not needed, because msbuild will do this for you by default, however in certain cases not all packages are restored. I am still not sure why this happens, but to avoid the trouble altogether we forcefully restore all packages as so:
Then we run the
msbuild task to build our ASP.NET MVC project.
When the build is finished all output files should be stored in an artifact. Artifact is basically a zip file which is stored inside Bamboo’s database. Each build will generate a new artifact and later that artifact can be accessed. This means that we can redeploy historic builds easily.
Because artifacts are stored indefinitely, we should keep them as slim as possible, by copying only the required files.
Our deployment project will consist of 2 steps:
- Extract build artifact into a temporary folder on the build server
- Deploy artifact with
First let’s choose the artifact we need as so:
Then we can use our previously prepared deployment script as in the screenshot below. The argument value is: