License change for Release Management in TFS “15”

Since the new version of Release Management was introduced in TFS 2015.2 it has been in trial mode, anyone with at least a TFS CAL/Basic License could use it.

Based on the old Release management system I thought that you would need Visual Studio Enterprise to create releases when the trial was over, I was wrong.  From TFS “15” RC2 1 all Release Management features, including authoring of release definitions, are included in TFS CAL. Stakeholder can as before approve or reject releases.

Concurrent pipelines

From now you can run one release pipeline at a time for free, additional releases that you create will be queued automatically, additional pipelines will cost $15/concurrency each month or it looks like you will be able to utilize Visual Studio subscriptions in increasing the number concurrent release pipelines .

Calling scripts in RM2015 vNext style

I recently improved all of my powershell scripts for RM2015 vNext deployments by including a param() clause at the start of each script. Only to discover that when using PS/DSC actions in RM2015 (and 2013 for that matter) you cannot pass parameters! Quite frustrating as the main reason i did this improvement was because of Microsoft’s message at the end of their Release Management vNext Plans blog post

To maximize the chances of carrying your investments forward, we recommend that you write PS scripts to drive your deployments with the current versions of RM server

and the default/recommended way to work with powershell scripts using the PowerShell on Target Machines VSO agent task is to pass parameters. Sure, the VSO agent task has the advanced option “Sessions Variables” for backward compatability but I would really prefer to make my RM2015 solution forward compatible instead.

So how do I make my RM2015 scripts and release templates forward compatible? Turns out it is not that difficult to achieve. You’ll need a generic wrapper script and three variables in RM. Your wrapper script should look like this:

Invoke-Expression "$PSScriptRoot\$PowerShellScript $ScriptArguments"

Make sure your wrapper script is included in your build drop together with your other deployment scripts. Then add three global variables in RM2015.

  1. PSScriptPath – set the value to the “drop releative” path of your wrapper script. (If this path differ between components make this a component variable instead)
  2. PowerShellScript – do not set a value at the global level, we just want the variable to show up in the dropdown list for Custom configuration in our PS/DSC action.
  3. ScriptArguments – do no set a value at the global level, same reason.

And now, your PS/DSC actions can look like this:


which corresponds nicely with how it is done in the VSO agent task:


We are now forward compatible!

Release Management 2013 licensing change

When Microsoft acquired InRelease, later Release Management for Visual Studio in 2013 you had to pay a license for each agent deployed on every server you wanted to deploy to. Even though you got licenses together with Visual Studio Ultimate these agents would cost a lot of money for big companies.

Effective January 1, 2015, target servers receiving automated deployment from Release Management Server will no longer require a Visual Studio Deployment license, in other words, it’s free!

From the licensing whitepapers:

To utilize the Release Management solution in Visual Studio 2013, you must acquire licenses for the following:

  1. Each person using the Release Management Client for Visual Studio 2013 for creating, updating or deleting a release pipeline sequence must be licensed for either Visual Studio Ultimate with MSDN, Visual Studio Premium with MSDN, Visual Studio Test Professional with MSDN or MSDN Platforms.
  2. A Team Foundation Server CAL is not required to approve stages or sign off on a release.

Read more about in in the Visual Studio and MSDN Licensing White Paper