OpsHub Visual Studio Online Migration Utility

I recently got to use OpsHub Visual Studio Online Migration Utility to help the client move from on premises TFS environment into the awesomeness of Visual Studio Online. OpsHub Visual Studio Online Migration Utility is actually pretty good and solid tool. The migration was very smooth and relatively painless. I thought I share some of the things I have come across when using VSO using OpsHub Visual Studio Online Migration Utility:

  • OpsHub Visual Studio Online Migration Utility is free and can be downloaded from Visual Studio Gallery here (http://aka.ms/OpsHubVSOMigrationUtility)
  • OpsHub Visual Studio Online Migration Utility can only be installed on 64 bit Windows machine
  • During the installation, you will be required to fill out the registration info. Please make sure that you have provided a valid email address since you will need a verification code to proceed with the installation that will be sent to the email address you provide during the install. Usually, it takes a couple of minutes for an email to come through. Check your Spam folder in case if the email was mislabeled by your spam filter
  • If you are using proxy servers to connect to the internet, you will need to do the following http://opshub.com/main/index.php/ovsomu-proxy to get the installer working. Please note that even if you follow the instructions, and even if you get passed the registration page to next page (Verify Email page), which to a normal person mean that the registration process was successful and that you should receive verification email, it does not necessarily mean that you will get an email. The reason for it could be that your proxy is blocking the installation wizard from sending the registration info to Opshub. Very frustrating. As a workaround, you can run the installation wizard on any other machine that is not going through the proxy, fill out the registration email, wait for an email, then use the verification code that you have received to install OpsHub Visual Studio Online Migration Utility on any other machine in your network. From what I can tell, verification code is not tied to machine that you're installing on in any way
  • If you have installed OpsHub Visual Studio Online Migration Utility while your machine was going through the proxy to get to the internet, and then managed to convinced your IT to allow you to bypass proxy, you will need to uninstall OpsHub Visual Studio Online Migration Utility, remove any changes you've made as per http://opshub.com/main/index.php/ovsomu-proxy and then reinstall OpsHub Visual Studio Online Migration Utility. Sounds silly, but it's true. By the way, I strongly recommend that you spent some time and convince your IT to allow the machine that is running OpsHub Visual Studio Online Migration Utility to bypass the proxy, it just makes things a lot easier. Especially when you start configuring the migrations.
  • Before you start configuring migrations, you will need to:
    • Pre-create empty team projects (with matching process templates) for the team projects that you will be migrating from on premises TFS
    • Add users to your Visual Studio Online account and grant them some permissions on the team projects. One of the steps in configuring the migrations is map local users to VSO users, so you'll need users to be in place before you start the migration
    • Add VSO account that you will be using to migrate to Project Collection Service Accounts group in VSO
  • Remember that you can migrate one project a time. You don't have to move the entire project collection from on premises to VSO
  • If you're migrating work items then you might have to deal with template discrepancies. Be patient.
  • OpsHub Visual Studio Online Migration Utility is provided by a company called OpsHub, Microsoft partner. Their support is pretty good. You can reach them via email ovsmy@opshub.com or via StackOverflow using hashtags #opshub and #visual-studio-online. Please keep in mind that the company is located in California, USA, and take into account the time difference when awaiting a response.

That's all.

Schedule TFS releases

I have been asked if TFS 2013 Release Management allows you to schedule TFS releases. Yes, you can schedule TFS release. What I mean is TFS allows you to schedule the deployment time of the release during the acceptance step of the release path. It's that easy.

But what if you want to schedule release to happen on a regular basis, for example you would like to automatically deploy/release the latest code to the development environment every Monday/Wednesday/Friday nights. TFS 2013 Release Management does not really have that feature. Luckily, we have reach TFS API and PowerShell. So, here is a PowerShell script that triggers release of the last successful build with the build quality set to "Ready for Deployment" (obviously, you can use any other filter to get the build you want):

param

(

    [string] $tfsCollectionPath = "http://SERVERNAME:8080/tfs/COLLECTIONNAME",

    [string] $tfsProjectName = "PROJECTNAME",

    [string] $buildDefinitionName = "BUILDDEFINITIONNAME",

    [string] $releaseTemplate = "RELEASETEMPLATENAME"

)

 

# Clear Output Pane

clear

 

# Enforce coding rules

Set-StrictMode -version 2.0

 

# Loads Windows PowerShell snap-in if not already loaded

if ( (Get-PSSnapin -Name Microsoft.TeamFoundation.PowerShell -ErrorAction SilentlyContinue) -eq $null )

{

    Add-PSSnapin Microsoft.TeamFoundation.PowerShell

}

 

[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.Common")  

[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.Client")  

[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.Build.Common")  

[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.Build.Client")  

 

[Microsoft.TeamFoundation.Client.TfsTeamProjectCollection] $tfs = get-tfsserver $tfsCollectionPath

 

$tfsCollection = New-Object -TypeName Microsoft.TeamFoundation.Client.TfsTeamProjectCollection -ArgumentList $tfsCollectionPath

 

$server = new-object Microsoft.TeamFoundation.Client.TfsTeamProjectCollection(New-Object Uri($tfsCollectionPath))

$buildServer = $server.GetService([Microsoft.TeamFoundation.Build.Client.IBuildServer])

$buildDetail = $buildServer.QueryBuilds($tfsProjectName, $buildDefinitionName)

 

$foundBuilds = $buildDetail | where {($_.Quality -eq "Ready for Deployment") -and ($_.Status -eq "Succeeded")} #| sort $_.BuildNumber

 

if ($foundBuilds -eq $null) 

{

    Write-Host "No builds found"

}

else

{

#$foundBuilds = $build | select BuildNumber, SourceGetVersion, Quality, DropLocation

 

    $LastReadyForDeploymentBuildNumber = $foundBuilds[-1].BuildNumber

    $LastReadyForDeploymentBuildDropLocation = $foundBuilds[-1].DropLocation

    Write-Host "Triggering build " $LastReadyForDeploymentBuild

 

    &"C:\Program Files (x86)\Microsoft Visual Studio 12.0\Release Management\bin\ReleaseManagementBuild.exe" release -rt $releaseTemplate -pl $LastReadyForDeploymentBuildDropLocation

}

 

As you can see from the script, script first connects to TFS, finds the proper build definition, then looks for last successful and "Ready for Deployment" build, then uses ReleaseManagementBuild.exe to trigger the release for that build. Obviously, the script could be improved, for example, to include the exception handling, but it should enough to get you started.

Now that you have the script, you can use Windows Task Scheduler to trigger the release outside of the Release Management client. As often as you need it, whenever you feel like it.

TFS/Visual Studio Online API

As I was looking for API reference for TFS Release Management, I came across this useful link that I wanted to pass along. Visual Studio Online REST API Reference page (https://www.visualstudio.com/en-us/integrate/api/overview) includes API reference for TFS components like build, work item tracking, version control/GIT, load test, test management, shared services, etc. Basically, it includes reference for all existing API hooks for TFS/VSO.

I have also found this blog post (http://blogs.msdn.com/b/aseemb/archive/2014/12/23/how-to-program-against-release-management.aspx), which includes the API reference for TFS release management. It includes sample code that allows you to create a user, environment, release path, release definition, etc. Please note that release management (like build) is changing quite a bit in TFS 2015, so it's safe to assume that the API for build and release management will also be changing. Visual Studio Online REST API Reference page should have the latest changes, so just use it as a reference :)

If you haven't already seen it, look at the information on getting started with these APIs.

DevOps Self Assessment

Microsoft has released a DevOps self-assessment online tool that allows you to gauge your readiness in the 7 key DevOps practice areas. Complete the form below to step through the assessment and see your results including guidance on which areas to focus on next. Total time commitment is approximately 10 minutes. DevOps self-assessment tool can be found at http://devopsassessment.azurewebsites.net/

TFS 2015 build/release agent install and configure

Installing TFS 2015 hosted build/release agent is extremely easy:

  1. Open TFS Web Access
  2. Click on Settings in the top right corner
  3. Click on project collection in the breadcrumbs
  4. Click on Download agent link to download .zip file with build/release agent in it. Right click on downloaded .zip file, click on Properties and Unblock the files if it is blocked
  5. Now the tricky part, the installation of build/release agent is essentially unzipping the file into a folder. Please make sure that you unzip the file into a folder that is not under your user profiles (for example, Downloads or Documents) or Program files folders, because this will cause UAC to kick in when build/release job will try to call to build/release agent. So, unzip folder somewhere like D:\BuildAgent\. Once you've unzipped the file into a folder, you have installed build/release agent. Now we need to configure it.
  6. Open PowerShell (preferably as administrator), and browse to the folder where you unzipped the build/release agent
  7. Run ConfigureAgent.ps1 and follow the wizard

That's it. Easy…

Drop location in new TFS 2015 build

In the new TFS 2015/VSO build, you can save the output to the server or to the good old drop location. If you would like to use the drop location, you will need to remember to specify how you would like the output to be stored. What I mean is that you will have to specify in the build definition the folder structure you would like to create. For example, instead of \\servername\drop, you will need to specify \\servername\drop\$(Build.DefinitionName)\$(Build.BuildNumber)\

There are quite a few system/metadata variables in TFS 2015, but that will be another blog post.

UPDATE: There is now Publish Build Artifact action in new TFS Build that you should use to control where and how your build output is produced.

P.S. : If you're not using new TFS 2015/VSO build system, you should give it a try. It's awesome.

TFS and PowerShell

It has been a while since we were able to write PowerShell scripts against TFS. For those who has not tried it yet, give it a shot. It's actually very easy to use and powerful tool. For those who has not tried PowerShell yet, I strongly encourage you to do that. There is no escape, PowerShell is everywhere J

Anyways, here is what you need to do to be able to write PowerShell script against TFS:

  1. Make sure you have PowerShell 3.0 installed or better. PowerShell is part of Windows Management Framework. To get PowerShell 3.0, you need to download and install Windows Management Framework 3.0 from https://www.microsoft.com/en-ca/download/details.aspx?id=34595. You might have to reboot your machine after this install.
  2. You also to download and install Windows PowerShell Cmdlets. This tool provides a Windows PowerShell interface that supports basic version control commands and a pipeline and glue to enable scripting. Windows PowerShell Cmdlets for TFS are part of Microsoft Visual Studio Team Foundation Server Power Tools that can be found at https://visualstudiogallery.msdn.microsoft.com/f017b10c-02b4-4d6d-9845-58a06545627f. Just make sure that you pick PowerShell component during the install.

That's it. Happy scripting.

It’s back and it is going to be awesome!

ObjectSharp's At the Movies event is back in town. It's is going to be awesome! And, not just because of the good looking and courageous Captain America in the last event poster. J So, mark May 13th in your calendar and join us for the free and highly informative geek event. As usual, it will cover all the latest and greatest technologies:

  • The new TFS 2015 with its new completely overhauled build and release tools, improvements to backlog management, the kanban board, the task board, card customization and more. A lot more… And, yes, the long awaited project rename capability… Presented and demoed by Microsoft MVPs in Visual Studio ALM - Dave Lloyd and Max Yermakhanov
  • All the latest and the most excellent changes to Azure, and there are quite a few of those… Presented and demoed by Shane Castle
  • All the coolest and most amazing technical news and changes that were announced in Build 2015 that would be relevant to you now and in the near future… Presented and demoed by Lori Lalonde

As I said, it will be awesome! And, it's not just for developers. It's for DevOps as well. It's for any IT person who had a pleasure to work with Azure or Team Foundation Server. Think about, Dave's and my session will cover builds and deployments using TFS. That's DevOps and Ops. Shane's session will cover Azure. That's again, DevOps and Ops related. Lori's and Dave's session will have quite a bit of DevOps and Ops goodness too.

So, don't wait. Register today at http://www.objectsharp.com/atm! It's free! it's fun! And, you will learn a thing or two J

 

Test plan field is empty in TFS test plan progress

I spend a lot of my time nowadays helping clients successfully adopt Team Foundation Server. From planning, installation and configuration to customization, builds, release management and everything in between. And, even though, I've been working with TFS for a long time, once in a while you come across something that you have seen before. When that happens, I do my best to share my experience on this blog. So, here is my latest discovery.

The client is running a fresh install of TFS 2013 Update 4. Everything is well, except for one minor annoyance. For some reason, Test Plan field is empty in the Test Plan Progress report. There are no errors in warehouse of analysis cube processing. In fact, there are no errors in TFS, Reporting Services or Analysis Services. Every log is clean and everything runs smoothly. Typically, when you see something does not work or look properly you'd expect an error or at least a warning to show up somewhere, right? Not this time. I've looked around the web, but could not find any reasonable explanation why this is happening. I've found a few entries with people experiencing similar issue, but none provided a solution to this.

Luckily, as a Microsoft MVP in Visual Studio ALM, I have "direct" access to the product team. So, I've reached out and after a few emails back and forth, we've found a solution. It looks like that this issue can occur on fresh installs of TFS. Apparently, the Test Plan dimension loses the friendly names for some attributes when the warehouse/cubes gets processed before a project gets created. This issue can be easily fixed, if you rebuild the warehouse/cube using TFS Admin console. Clicking the Rebuild button in TFS Admin console will put everything back in its place. It's that easy. J

Pasting into Office365 OWA causes OWA to crash and close

I love Office 365 and Outlook Web Access. What's not to love?!? Excellent product with tons of amazing features for a very fair price. J Having said that, like any other good product, it can always get better. For example, I have noticed that every time when I try to copy/paste anything into the body of the email message, OWA crashes and closes with an "IE has stopped working". It closes and then recovers back to the same page. When you try to paste again, the page crashes again, and so on and so forth. This only happens when you use Internet Explorer, and copy/paste works fine in Chrome. I can always say that it's happening because "IE sucks" like a lot of people do, but I'd rather focus on finding a solution than who/what is to blame. Anyways, with a bit of internet searching I have found a work around.

  1. Go to Internet Options
  2. Click  the Security Tab
  3. Highlight the Internet zone, click Custom level button
  4. Scroll down to the Scripting section, and in the Scripting section, find Allow Programmatic clipboard access option
  5. Set Allow Programmatic clipboard access option to Enable
  6. Click OK to save
  7. Click Yes, if warning prompts comes up

Now copy/paste into the body of an email message should work just fine when you open OWA with Internet Explorer.