Copy TFS Build Definitions between Projects and Collections
Posted
by Jakob Ehn
on Geeks with Blogs
See other posts from Geeks with Blogs
or by Jakob Ehn
Published on Thu, 05 Jun 2014 07:50:54 GMT
Indexed on
2014/06/05
15:25 UTC
Read the original article
Hit count: 495
Originally posted on: http://geekswithblogs.net/jakob/archive/2014/06/05/copy-tfs-build-definitions-between-projects-and-collections.aspx
The last couple of years it has become apparent that using multiple team projects in TFS is generally a bad idea. There are of course exceptions to this, but there are a lot ot things that becomes much easier to do when you put all of your projects and team in the same team project.
Fellow ALM MVP Martin Hinshelwood has blogged about this several times, as well as other people in the community. In particular, using the backlog and portfolio management tools makes much more sense when everything is located in the same team project.
Consolidating multiple team projects into one is not that easy unfortunately, it involves migrating source code, work items, reports etc. Another thing that also need to be migrated is build definitions. It is possible to clone build definitions within the same team project using the TFS power tools.
The Community TFS Build Manager also lets you clone build definitions to other team projects. But there is no tool that allows you to clone/copy a build definition to another collection. So, I whipped up a simple console application that let you do this.
The tool can be downloaded from
Using CopyTFSBuildDefinitions
You use the tool like this:
CopyTFSBuildDefinitions SourceCollectionUrl SourceTeamProject BuildDefinitionName DestinationCollectionUrl DestinationTeamProject [NewDefinitionName]
Arguments
- SourceCollectionUrl
The URL to the TFS collection that contains the team project with the build definition that you want to copy - SourceTeamProject
The name of the team project that contains the build definition - BuildDefinitionName
Name of the build definition - DestinationCollectionUrl
The URL to the TFS collection that contains the team project that you want to copy your build definition to - DestinationTeamProject
The name of the team project in the destination collection - NewDefinitionName (Optional)
Use this to override the name of the new build definition. If you don’t specify this, the name will the same as the original one - Since we are (potentially) create a build definition in a new collection, there is no guarantee that the various paths that are defined in the build definition exist in the new collection. For example, a build definition refers to server paths in TFVC or repos + branches in TFGit. It also refers to build controllers that definitely don’t exist in the new collection. So there will be some cleanup to do after you copy your build definitions. You can fix some of these using the Community TFS Build Manager, for example it is very easy to apply the correct build controller to a set of build definitions
- The problem stated above also applies to build process templates. However, the tool tries to find a build process template in the new team project with the same file name as the one that existed in the old team project. If it finds one, it will be used for the new build definition. Otherwise is will use the default build template
- If you want to run the tool for many build definitions, you can use this SQL scripts, compliments of Mr. Scrum/ALM MVP Richard Hundhausen to generate the necessary commands:
USE Tfs_Collection
GO
SELECT 'CopyTFSBuildDefinitions.exe http://SERVER:8080/tfs/collection "' + P.ProjectName + '" "' + REPLACE(BD.DefinitionName,'\','') + '" http://NEWSERVER:8080/tfs/COLLECTION TEAMPROJECT'
FROM tbl_Project P
INNER JOIN tbl_BuildGroup BG on BG.TeamProject = P.ProjectUri
INNER JOIN tbl_BuildDefinition BD on BD.GroupId = BG.GroupId
ORDER BY P.ProjectName, BD.DefinitionName
Example:
CopyTFSBuildDefinitions https://jakob.visualstudio.com DemoProject WebApplication.CI https://anotheraccount.visualstudio.com
Notes
Hope that helps, let me know if you have any problems with the tool or if you find it useful
© Geeks with Blogs or respective owner