The Ramblings of Two Microsoft .NET Developers, TFS, and Visual Studio ALM Guys --- "Yes, we are both named Ed."

Microsoft’s Islands in the Stream



There is a great article in the August 1, 2010 edition of the SD Times by Dave Worthington (@dcworthington) about the Visual Studio 2010 ALM tools including Team Foundation Server 2010.  It’s titled Microsoft’s islands in the stream.”  Some really great colleagues in the ALM community have been interviewed and provided some pretty honest feedback from what we have been seeing over the last year or so.  Check it out!

 

Ed Blankenship



Lab Management Released and Included with MSDN Subscriptions



This is some really exciting news for customers of Visual Studio 2010 and Team Foundation Server 2010!  Today, Microsoft has announced that customers who have purchased Visual Studio 2010 Ultimate with MSDN or Visual Studio 2010 Test Professional with MSDN now receive the Lab Management capabilities for Team Foundation Server!  That means no per-processor licensing fees for your physical host servers that will be hosting your virtual machines!

Earlier this year, I passed on Lab Management news that indicated that it would cost $1,599 per processor (retail.)  Microsoft has listened to the feedback and has also made it a “feature” in the Visual Studio family instead of a completely separate product.

Microsoft has also announced an update to the Lab Management functionality in the different products to bring it to full RTM/RTW status.  You’ll recall that when Visual Studio 2010 released earlier this year that the Lab Management features ended up still being released in a “Release Candidate” status.  The product team has spent the last few months gathering feedback and include updates to improve performance throughout the product.  The “patch” will be available later this month.  I highly recommend updating to the latest version by installing the patch as soon as it becomes available.

When it is released, you will see the following “extra” installation media become available in your MSDN Subscriber Download listings:

  • System Center Virtual Machine Manager* (SCVMM)
  • Visual Studio 2010 Agents

*A grant of “limited use” rights for SCVMM are included.  This means that you can only use SCVMM for your Visual Studio 2010 Lab Management test lab.

This is a great move for customers.  Creating a virtual lab management can be an expensive endeavor for business.  I recall visiting customers who have spent tens of thousands of dollars on competing products like VMWare Lab Manager.  This is really bringing virtual lab management to everyone!

If you are curious about more information, see Brian Harry’s announcement.

 

Ed Blankenship



Milestone: Microsoft Developer Division and TFS 2010 Build



For quite a while, the Developer Division at Microsoft continued to use their internal build systems to build Visual Studio.  TFS Build had only been used by certain teams within the division but not standard across the division.  I had the opportunity to visit one of the huge build labs last time I was in Redmond and it’s impressive.  It was just one of them too. Smile  I really got an appreciation for the complexity that was involved in building .NET, Visual Studio, and Team Foundation Server.   We’re talking huge builds that take up a lot of time.

Brian Harry just mentioned that they had hit a huge milestone for the division during their MQ phase and have gotten a build to run through the TFS 2010 Build system!  Sounds like they still have some work to go to get it tuned but getting a Visual Studio build through TFS Build is huge accomplishment!  Looks like they have even taken some of the experiences they gathered and already integrated improvements into the next version of the product.  That just benefits all of us as customers whenever Microsoft is eating their own dogfood. 

Congratulations!

 

Ed Blankenship



Recursively Finding Files in TFS Build 2010



One of my favorite new build workflow activities is the FindingMatchingFiles activity.  It’s an activity that is provided out of the box for use during Team Build that returns an IEnumerable<string> of all of the files that match a particular wild card string.

It’s available in the toolbox under the Team Foundation Build Activities tab.  The full name of the activity is:  Microsoft.TeamFoundation.Build.Workflow.Activities.FindMatchingFiles.

TFS 2010 Build Workflow Activities Toolbox

Here is a typical usage if you are looking for all .CSS files in a particular folder.

TFS 2010 Build Workflow FindMatchingFiles Activity

The problem I was attempting to solve is how to find all of the files recursively in all of the subfolders as well.  All I had to do was change the match pattern argument to include a “**” in front of the original pattern and it worked like a charm!

TFS 2010 Build Workflow FindMatchingFiles Activity

Ed Blankenship



Comparing with the Latest Version in the Pending Changes Window



Usually before checking in to TFS Version Control, I will navigate to the pending changes window and compare/diff with the latest version to see what changes I have made.  It’s a good habit to go through just to make sure you aren’t checking anything in that you don’t intend to be committed.

I’ve just been doing it the long way every time by choosing the option from the context menu.

Compare with Latest Version in TFS Pending Changes Window

A client asked if there was a quicker way and I ended up finding out that there are two undocumented features to diff the files in the pending changes window:

  • Shift + Double-Click on the Item
  • Shift + Enter on the Item

Updated – (7/1/2010 11:45 AM)

You can use a registry key to even swap the view/diff behavior in the Pending Changes tool window.  Setting this registry key will make double-click/enter run compare, and shift+double-click/enter view the file.

  • Path:     HKCU\Software\Microsoft\VisualStudio\<ver>\TeamFoundation\SourceControl\Behavior
    • <ver> = 10.0 for Visual Studio 2010 & Team Foundation Server 2010
    • <ver> = 9.0 for Visual Studio 2008 & Team Foundation Server 2008
    • <ver> = 8.0 for Visual Studio 2005 & Team Foundation Server 2005
  • Value:   DoubleClickOnChange (DWORD)
    • 0 for view as the primary command (default)
    • 1 for compare as primary command

How about that?

 

Ed Blankenship



Creating a Virtual Wi-Fi Hotspot to Share Your Internet Connection



One of my pet peeves is places who charge for Wi-Fi internet access.  Another pet peeve in the same basket is those who make me pay for each device that I want to connect.  Even though more and more locations are starting to offer free Wi-Fi access, I can’t solve the first one.  However, I can attempt to solve the second problem scenario and here’s how…

I pay for internet access on my Windows 7 laptop and then use Connectify to create a virtual Wi-Fi hotspot.  What is this Connectify, you ask?

A Windows 7 feature called Virtual Wi-Fi didn’t end up making the cut line for the final release.  We’ll see if it makes it into a future version of Windows.  The cool thing is that the plumbing for that feature did make it into Windows 7 and that’s where Connectify steps in.  You can basically use your Wi-Fi card to create another ad-hoc network that can then be used to share your internet connection.  This even works whenever you are connected to a wireless network for that internet access.  It’s super easy and it’s free.

Connectify

The one catch is that you need to be running Windows 7 to make it all work.  It works perfectly for most internet connections.  I have noticed that it doesn’t work whenever I’m connected using my Verizon card but that’s the only time I’ve noticed an issue.

 

Ed Blankenship



Moved Web Hosting to ORCS Web



I apologize to everyone who experienced intermittent availability problems with my blog site for the past few months.  They ended up showing up whenever ASP.NET 4 was installed on the shared hosting server that I had over at Server Intellect.  I wasn’t ever able to figure out the root cause of it but really looking forward to a native ASP.NET 4 compatible build of dasBlog soon.

Anyhow, I’ve switched everything over to ORCS Web and thankfully I haven’t seen any of the recurring issues that I used to!  The servers even have ASP.NET 4 installed on them so I’m really not sure what was going on.  I do know that the ORCS Web team was extremely helpful during the transition and were super responsive anytime I had a support request.  If you are looking for a web hosting provider, you should consider ORCS Web.  Looks like they are a Microsoft WebsiteSpark provider.  They are even based pretty close in Charlotte, NC!

Again, I apologize for intermittent downtime of posts and please let me know if you happen to see any issues going forward.

 

Ed Blankenship



Deploying Process Template Changes Using TFS 2010 Build



I mentioned in my last blog post about using TFS to manage TFS that I’d talk a little about how I use TFS 2010 to manage and deploy process template changes.  I’m excited to be able to provide some more details about it!

Background

I use to create batch files for deploying process template changes and store them in version control.  There’s certainly nothing wrong with that approach but I really wanted have an easier way to maintain this process that allowed reusability and even continuous integration.  Whenever I checked in a change to the process template branch for the test environment, I wanted it to immediately deploy those changes to that environment.  I also wanted to make it super easy for others to be able to make changes and then queue a deployment.

I need a build definition using TFS 2010 Build!

Build Process Template

So I have created a build process template that does exactly this.  My goals for this process template were to not require any custom workflow activities or custom assemblies to be required to get the build process template to work.  You simply only need to check-in the XAML file and begin using it.  That one requirement ended up being tougher to follow than I originally thought.  I had to take a few alternate methods that didn’t always end up with the best user experience but I think you’ll see that the template is still helpful.  (If you have ideas for improvements, please let me know!)

I hope you’ll see it as an example for creating “builds” that don’t necessarily compile & run tests.  Using Windows Workflow Foundation in Team Build 2010 makes it extremely useful for any type of process you want to automate.

Overview

At a high level, here is what this build process template attempts to accomplish:

  • Standard Build Features:
    • Build Versioning
    • Label the source using the version number
    • Getting Latest Version or Specific Version
    • Associate Changesets & Work Items
    • Gated Check-In, Continuous Integration, etc.
  • Ability to specify multiple team projects to update
  • Ability to specify multiple work item types to update
  • Backup each of the the work item type definitions that are currently being used in each team project (just in case!)
  • Copy the version of the work item type definitions that are used and backups to a drop folder

Disclaimer:  I’m going to give this template the “works on my machine” label.  This template may not perform as advertised including blowing up your server, deleting everything on your hard drive, or cause your hair to fall out.  Use at your own risk!  You have been warned.  If it works for you, awesome!  If not, please let me know about any issues or areas of improvement.

How to Use the Build Process Template

After you downloaded the template and check the XAML file into your build process templates folder, you’ll want to create a new build definition to use it.  Make sure you have also checked in your process template to a version control folder.

Workspace Definition

Specify the version control folder that contains your process template.  By default it will download the entire team project and scoping down the build process template allows your build to run quicker since it is not downloading everything in the team project.

image

Process Tab

Choose the new build process template file from the available process templates:

Note:  If you don’t see the build process template as an available item in the combo box, you’ll want to click New and then choose the XAML file you checked in as the existing build process template.

image

The next thing you’ll want to do is specify the team projects you want to update and the URL for your TFS 2010 team project collection.

image

The last two required process parameters are extremely important.  You need to specify the work item type names and the server path locations to the work item type definition (XML) files.  Each of the process parameters are string lists so you’ll want to make sure you match them up in the exact order in both lists.

Work Item Type Names (for MSF Agile)

SNAGHTML996183

Work Item Type Definition Files

Make sure you specify the server path location for each of the WITD files!  I ended up reusing a dialog for this purpose that you may have been used to seeing in other builds you have configured.  It’s the same editor that allows you to choose solution and project files to build.  We can use it for this purpose too!  Just be sure to select the “All files (*.*)” filter for the Items of Type combo-box.

SNAGHTMLa1fa96

Again – make sure you put each of the XML files in the same order that you used for the work item type names.  For example, your Bug.xml file will be the first in the collection and UserStory.xml will be the last if we are using the same WITs as the figure above.

Other Details

Make sure that your build agents have Visual Studio Team Explorer 2010 installed so that witadmin.exe will be located.  You can always use the new build agent tagging functionality to identify which agents have Team Explorer available and then use the Agent Settings process parameters to limit the build to only reserve agents with the tags you specify.

Finally, make sure your build service account has the appropriate permissions to be able to import new work item type definitions to your team projects.

[Updated – 3/24/2011]

Thanks for reporting feedback and bugs!  Latest version includes the following bug fixes and improvements:

  • 10/26/2010:  Will properly associate work items and changesets correctly now.
  • 10/26/2010:  Discovers location of witadmin.exe on build servers with a 32-bit OS installed.
  • 10/26/2010:  Detects error on import and writes as build error instead of message.  Allows for the build to not succeed in this circumstance.
  • 3/24/2011:  Reduced the verbosity of some of the build workflow activities.  This should reduce the noise in the build log and show what is most important.  Be sure to set the entire build’s verbosity higher if you need to troubleshoot issues.  (If you are interested in how to lower a particular workflow activity’s tracking verbosity, check out page 402 in our new TFS 2010 book).

 

Download the Build Process Template

 

Let me know if you have any feedback about things you like or areas for improvement!  Feel free to comment below so I don’t lose track of the suggestions. Smile

Ed Blankenship



Managing TFS Artifacts Using TFS



Many years ago, I really thought the fact that SQL used itself to manage itself was pretty cool (i.e. master database.)  For the past several years, I have been doing something pretty similar and someone just reminded me that it was an interesting concept.  I use TFS to manage the artifacts needed to manage TFS.

TFS Team Project

The first thing I end up doing is creating a team project usually named “TFS” to hold all of the artifacts.  I personally only give the TFS Administrator permissions to the project.  As you’ll see, there may be security sensitive content that may be stored in this team project.  From time to time, other developers may help out with some of the custom tools that can be created to extend TFS.  I’ll create special team project security groups and permissions to those security groups for those particular scenarios.

Reporting Service Encryption Key Backup

After I have setup the TFS team project, the first thing I check-in is the backup of the encryption key from SQL Reporting Services.  It’s extremely important for disaster recovery scenarios that you have a backup of the key since the encrypted contents of SQL Reporting Services won’t be recovered if you don’t have the key.  By checking the key file into version control, you can always make sure you’ll have it backed up with the regular SQL backup process of the databases.

image

See for more information:  Back Up the Reporting Services Encryption Key

Process Templates

image Managing changes to process templates is one of the main reasons I had originally had the idea of creating a team project to manage TFS artifacts.  I think version control is the perfect place to manage changes to all parts of your process templates, especially work item type definition files.  I even create two branches of the process template folders:  one for the production environment and one for the test environment.  This allows you to manage changes just as you would your software releases.  Work item type definition changes definitely require some testing especially since there are risks in causing issues with certain changes.  (Has anyone ever messed up the warehouse?) :)

Build Process Templates

I keep all of the “golden” copies of build process templates in this team project.  I usually perform my actual development work for build process templates in this team project as well and will usually have some test build definitions to try them out.  You could also easily use your staging or test TFS server for this effort too.

Custom Build Assemblies for Build Controllers

One of the awesome new features for TFS 2010 is the ability to store custom build assemblies (like workflow activities, build tasks, build process parameter custom editors, etc.) in a version control folder that the build controller can notify build agents to monitor to deploy those assemblies to each of the build servers in your build lab.

If you want to deploy a new version of those assemblies, just check in the new version and all of the controllers & agents will use them for the next build they perform.  Pretty awesome if you ask me.  I create a folder in the TFS team project just for this purpose.

SNAGHTML6d53cc

Source Code

imageThe TFS team project is usually the main location where I will store source code for all of the different extensibility points for TFS and Visual Studio.  This list of custom tools isn’t exhaustive by any means but should give you some ideas of the type of source code that could be contained in this team project:

  • Custom Check-In Policies
  • Custom Build Workflow Activities and Build Tasks
  • Custom Work Item Controls
  • Web Service Event Handlers for TFS Events
  • Custom Testing Data Collectors (Diagnostic Data Adapters)
  • Migration Utilities and Adapters
  • Custom Code Analysis Rules
  • Global Code Analysis Spelling Dictionary
  • Custom IntelliTrace Event Collectors
  • Other Visual Studio or TFS Tools

Builds

As I already mentioned above with testing out build process templates, I have several build definitions in this team project:

  • Testing Team Build 2010
  • Deploying Process Template Changes to Test & Production TFS Servers (I plan on having more information about this process in a future blog post.)
  • Custom Tool Builds

Other

Don’t stop with this list.  If it’s something that helps to manage TFS, feel free to store it in this team project.  Here are a few other examples of the types of artifacts I use this team project for:

  • SQL Queries to manage the data tier
  • Custom SQL Reporting Services Reports

 

What other types of things do you think, dear reader, are important to store in this team project for managing TFS?

Ed Blankenship

Need a List of Strings as a TFS 2010 Build Process Parameter?



I’ve been hitting my head against the table today trying to have a nice experience for editing a collection of string values as a custom build process parameter in my TFS 2010 build definition.  The problem comes with what editor is actually used to edit the process parameter at design time.  You can specify a custom editor for any of your custom build process parameters which is really handy but I needed the ability to use editors that were out of the box but still provided a sufficient experience to the end user.

My journey towards a solution…

Attempt 1

I began really wanting to have one build process parameter that had the type of Dictionary<string, string>.  That didn’t work out so well because when I went to edit it in my build definition, I received this editor and the add/remove members buttons.

TFS 2010 Build String Collection Editor

Attempt 2

I gave up on the Dictionary<T, T> approach and decided that I could handle it by specifying two collections of type Collection<string>.  I also attempted to try List<string> and even a String[] but ended up with this editor that seemed to not like System.String.

TFS 2010 Build String Collection Editor

Attempt 3

I found Microsoft.TeamFoundation.Build.Workflow.Activities.StringList.  It is a custom type that is known to Team Build 2010 and even has a custom editor that is registered to it that shows up.  That editor is Microsoft.TeamFoundation.Build.Controls.WpfStringListEditor.  Works great for me!  Take a look:

TFS 2010 Build String List Editor

 

Ed Blankenship