How to setup continous integration with team foundation build
Note: this entry has moved.
First, I followed the instructions and used the code from the Vertigo Software guys.
Next, the issue is that to configure a new project for continuous integration, you have to modify manually the web.config of the CI service as follows:
< appSettings >
< add key = " 1 " value = " TeamProjectName=MyProject;BuildType=MyBuildType " />
</ appSettings >
Yuck!
What I wanted was a UI that would automatically populate dropdowns with the available projects in TFS, as well as their configured Build Types, which is the information you need to setup a new continuous integration build using this solution. Here's the UI I built:
To set it up, you just need to unzip these files to the same location of the CI service (by default C:\Program Files\Microsoft Visual Studio 2005 Team Foundation Server\Web Services\CI), and add an entry in the web.config with the Url of your TFS:
< appSettings >
< add key = " ServerUrl " value = " http://tfs:8080 " />
</ appSettings >
The web.config also contains the references that are needed to connect to the TFS using the client APIs:
< compilation debug = " true " >
< assemblies >
< add assembly = " System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089 " />
< add assembly = " Microsoft.TeamFoundation, Version=8.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A " />
< add assembly = " Microsoft.TeamFoundation.Build.Common, Version=8.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A " />
< add assembly = " Microsoft.TeamFoundation.Client, Version=8.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A " />
< add assembly = " Microsoft.TeamFoundation.Common, Version=8.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A " />
< add assembly = " Microsoft.TeamFoundation.VersionControl.Client, Version=8.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A " />
< add assembly = " Microsoft.TeamFoundation.VersionControl.Common, Version=8.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A " />
</ assemblies >
</ compilation >
Connecting to the server is actually pretty easy:
TeamFoundationServer server = TeamFoundationServerFactory.GetServer(ConfigurationManager.AppSettings["ServerUrl"]);
server.Authenticate();
Then, to retrieve the source control projects in TFS, you request the VersionControlServer service from the server instance:
VersionControlServer vcs = (VersionControlServer)server.GetService(typeof(VersionControlServer));
Retrieving the configured build types can be done performing a query to retrieve items from the well-known path they are stored on the server, after getting an instance of the owning project:
VersionControlServer vcs = GetSCC();
TeamProject project = vcs.GetTeamProject(projectList.SelectedValue);
ItemSet items = vcs.GetItems("$/" + project.Name + "/TeamBuildTypes/*");
List < string > buildTypes = new List < string >(items.Items.Length);
foreach (Item item in items.Items)
{
buildTypes.Add(item.ServerItem.Replace(items.QueryPath, "").Substring(1));
}
Note that I'm removing the query path from the ServerItem property, as it contains the full server-side path to it. I must say that even without looking at the documentation, 10' of Google search, and Reflector was all I needed to get it done. A fairly intuitive API in general.