Customize the Release Management Build template – Part 1

To setup a build in combination with Release Management you need the Release Management build template. This template looks like the default build template but has an additional sequence action to start the release after the build is succeeded. The Release Management Build template can be found within the install location of release management.

C:\Program Files (x86)\Microsoft Visual Studio 12.0\Release Management\Client\bin\ReleaseTfvcTemplate.12.xaml

We will use this template and rename it to “BuildTemplate-Release-General.xaml”. As location for the build template we will use TFS project called: “Build Templates”. By using a central location we make sure we will not have duplicate build templates within our Team Foundation Server environment.

For different types of builds you would like to add files to your drop location that you save within a solution folder for this we will have to make a small adjustment to our build template. To make this adjustment open the Build template and navigate to the sequence activity that contains the “msbuild” action.

You can find the “msbuild” activity by following the following path:

“Overall Build Process” – “Run on Agent” – “Try” – “Compile, Test and Publish”.

In the sequence activity that contains the “msbuild”  action we will add two argument by selecting “Compile, Test and Publish” and then Arguments in to lower left corner. If you scroll down the list click on “Create Argument” to add a new argument.


Add the following arguments:

  • CopySolutionFolder: Will be used to save the location of the Solution folder relative to the Team Foundation server.
  • DropLocation: Will be used to save the drop location of the build.
  • CustomBuildDirectory: Will be used to save the location of the Solution folder on the build server.


Know that we have created the argument we can add actions to set the values of the arguments. Drag a “GetEnvironmentVariable<T>” action to the top of the “Compile, Test and Publish” sequence and call it “Get Drop Location Folder” and set the properties as you can see in the image.


The “WellKnownEnvironmentVariables.DropLocation” is the environment variable we need in order to get the drop location of the build. In the result property define the argument (“DropLocation”) in which you want to save the value.

Place an “If” control flow underneath the “GetEnvironmentVariable” action to check whether the value of the argument “CopySolutionFolder” is not null or empty. This because we will define this argument within the build definition interface. You can add an argument to the build definition interface by updating the Metadata Argument. Select this argument and edit it by selecting the three dots within the default value column.


Scroll down the list of parameters and check whether the argument you created is in the list. If this argument is not already in the list add it.



In the If control flow we check if the value of the “CopySolutionFolder” argument is not null or empty by defining the following condition:


If the argument is null or empty we will not take any action and if it contains a value we will try to get the local path of the solution folder in order to copy the contents to the drop location. To achieve this we need to add a sequence action to the else branch.


To retrieve the local path of the solution folder we place the “GetLocalPath” activity in the sequence. This action will allow us to add a TFS project relative path in the build definition. For example the value could be: “$/SharePoint Portal/MSFTPlayground.SharePoint.Farm/Deployment Configuration”. The result of the “GetLocalPath” action will be saved in the CustomBuildDirectory argument.


To finalize the build definition we add the “CopyDirectory” activity to the sequence. The source of the activity will be the solution folder (“CustomBuildDirectory”) and the destination will be the drop location (“DropLocation”).


Save the build template and check the file in into TFS. With the file in TFS you are able to use this template within a build definition. This template can be used by selecting show details in the process tab of a build definition and then selecting “New” to browse to the location were you have saved the build template within TFS.


Underneath the template selection you can see the parameters of the build template.


The categories 1,2,3,4,5 are the default categories. The Release category is the category that can be used to define the parameters regarding “Release Management”. The “Extra Files” category this is the category for our added argument.

In the next couple of post we will see how this build template will be used to start off a “Release” within “Release Management” order to start a SharePoint deployment.

Related Posts

VSTS Extension for Azure Role Based Access Control Today I published an extension for Visual Studio Team Services (VSTS) that gives you the ability to add and remove role based access assignments in Az...
Publish PowerBI files with Visual Studio Team Services Today I published an extension for Visual Studio Team Services (VSTS) that gives you the ability to deploy PowerBI files (pbix) to It use...
VSTS build or release agent on a self hosted machine in Azure or on premise You can think of many situations where you would like to create a self hosted machine for Visual Studio team services (VSTS). Installing and configuri...
My first public VSTS Extension A couple of days ago I started developing extensions for Build and Release pipelines of Visual Studio Team Services (VSTS). One of these extensions is...
Azure Function CI – 3. Deploying the Azure Function from the Build within VSTS This post is the third and last one in a series of posts and will help you by deploying a CI build for a Azure Function. Prerequisites This blog post ...
Creating the Release Template that runs after the Build – Part 3 With the component created in part 2 we can start using it to deploy applications to our SharePoint environment. We start by creating a new template. ...


  • I am learning Release management and would like to know at what point of time we will go and create our own build template. Default template is not sufficient?

    • Hi Ham,

      There can be a couple of situations. For most common situations the default build template is the way to go, and it keeps improving from version to version.

      But if you want to perform custom actions you will have to adjust the template, when you for example want to copy custom solutions files are maybe want to integrate the BizTalk Deployment Framework.

Leave a Reply

Your email address will not be published. Required fields are marked *