How to get rid of /tfs in TFS URL

There are two ways to get rid of /tfs in TFS URL. First is to unconfigure TFS application tier and pick a URL without /tfs when re-run TFS application tier configuration wizard, and second is configure IIS TFS site without /tfs.

In the first option, to unconfigure TFS application tier open the Team Foundation Administration Console on the Application Tier machine. Click on the server name and click on "Remove Feature". You can do the same from command prompt, execute TfsConfig setup /uninstall:ApplicationTier command to unconfigure TFS Application Tier. By removing the feature, we will be removing:

  • The Application Tier configuration from the server (but we don't remove the binaries)
  • Connection with Data tier (but the databases won't be deleted)
  • TFS Website.
  • TFS Application Pools
  • TFS Services (The Visual Studio Team Foundation Server Job Agent)

Then, when re-running the configuration wizard, pick the URL you want on the website settings page.

In the second option, first add port 80 and 443 to the list of TFS IIS ports

  1. Open IIS Management Console
  2. Browse to Team Foundation Server site
  3. Click on Bindings
  4. Add port 80 to http
  5. Add port 443 to https. Make sure pick the proper SSL certificate from the list

 Then, switch to / for TFS instead of /tfs

  1. Open IIS Management Console
  2. Browse to Team Foundation Server site, then /tfs web app under it
  3. Click on Basic Settings on the left menu
  4. Copy Physical Path value
  5. Go to up to Team Foundation Server site, click on Basic Settings on the left menu
  6. Replace Physical Path value with the one copied from /tfs web app
  7. Click OK to Save the changes
  8. Click on Authentication
  9. Make sure Windows and Anonymous authentication options are enabled
  10. Remove /tfs web app
  11. Update TFS Admin Console to use new public URL

I prefer the second option, but both options are good. Also, consider putting effort into redirecting old URLs to new ones.

Encrypt remote web.config

Deploying websites using VSTS/TFS is a breeze. Whether you deploy on premises or in the cloud. Quite often though, when you deploy on premises, you had to encrypt certain sections of web.config files for security reasons. There is no built in task in TFS/VSTS to do that. And, since this activity came up more and more, I've decided to write another build task and share it with the world. Introducing Encrypt Remote Web Config task: https://marketplace.visualstudio.com/items?itemName=automagically.EncryptRemoteWebConfig

When use the task, specify the following:

  • Folder path to where web.config resides
  • Section(s) of the web.config file you would like to encrypt. You can specify more than one comma separated sections at a time
  • Remote server name or IP address where website resides. You can specify more than one comma separated remote server at a time
  • Remote user name
  • Remote user password. Please use variables to store password securely.

Did I mention that the task is free?

@CurrentIteration Just got smarter

@CurrentIteration was a long awaited feature in TFS/VSTS. It was very exciting when it came along and we could create queries that would work sprint after sprint without having to update at the start of each sprint.

Now they just got better, @CurrentIteration now takes parameters. Pass it a Team to get the current iteration for that team. Which also gives us the ability to reference different current iterations in the same query. And finally, you can now query for past or future iterations just by including +n or –n.

Check out Lauren Brose’s blog for all the details.

VSTS Time Zone Settings

There seems to be a bit of confusion about time zone settings in VSTS. The confusion comes from the fact that there are two places where time zone settings can be configured for VSTS users: VSTS account time zone setting and VSTS user profile time zone setting.

VSTS account time zone setting is the MAIN time zone setting. This time zone setting is used by VSTS account for storing all date/time data. In other words, when you set your VSTS account time zone to EST, all timestamps in VSTS will be stored in EST time zone. Another good example of when VSTS account time zone setting is used is when you configure iteration dates, build/release schedules, etc. Account time zone setting is configured on the Account Settings page: https://*.visualstudio.com/_admin/_home/settings.

VSTS user profile time zone setting is used to make user experience more personal to the user and display the VSTS time stamps for when a user browsing VSTS using time zone configured for that specific user. So, if my VSTS account time zone is set to EST, but my user profile time zone setting is set to PST, then when I'm browsing the VSTS all date/time fields will be displayed in PST time zone. VSTS user profile time zone setting can be configured on user profile page (https://app.vsaex.visualstudio.com/me?mkt=en-US&campaign=o~msft~vsts~usercard), by clicking your name on the top-right corner of your VSTS page, then clicking on My Profile | Edit profile | Preferences option. Set your user time zone setting and click Save.

@mentions in VSTS/TFS

I find a lot of people don’t know about @mentions. @mentions allows you to bring someone into the conversation around a work item.  All you have to do is type an at symbol “@” into the discussion field.

Once you start typing the user search will appear similar to when you start typing a user name into the assigned To field.

image

Once you find the person that you want to bring into the conversation you just mention them in the Discussion field.

image

The person you mentioned will receive an email letting them know they were mentioned.

image

You can read all about it here.

VSTS Sync Migration Tools

If you need to bulk edit and migrate data between Team Projects on both Microsoft Team Foundation Server (TFS) and Visual Studio Team Services (VSTS), try VSTS Sync Migration Tools. It's not the most user friendly tool to use, but it's VERY powerful and flexible.

What can you do with this tool?

  • Assist in Bulk Editing of Work Items
  • Migrate Work Items & Test Management from one Team Project to another
  • Merge Team Projects
  • Migrate Work Items & Test Management from one account or collection to another
  • Assist in changing process templates

 

You can install this tool, by simply running Chocolatey command as such: choco install vsts-sync-migrator or download the latest release from GitHub and unzip. You can also obviously contribute to the tool: https://github.com/nkdAgility/vsts-sync-migration

A few tips on using the tool:

  • You need to add the account that you use to Project Collection Services Accounts group using tfssecurity command
  • You also need to add ReflectWorkItemID field to your source and destination. This field is technically not required, but since it is used to make sure that work items are not migrated more than once when you re-run the tool more than once, I find it very important to add. Add this field to the destination if you're syncing work items one way, and add this field to both source and destination if you're syncing bi-directionally. More information about server configuration for the tool, see http://vsts-bulk-editor.readthedocs.io/en/latest/server-configuration/
  • This tool is based on processors where you can load a specific processor to do something you need:
    • Use WorkItemMigrationContext processor to migrate the tip revisions of the work items
    • Use WorkItemRevisionReplayMigrationContext processor to migrate the work items with history
    • Use WorkItemUpdate processor to bulk edit the work items
    • Use AttachementExportMigrationContext processor to export all work items attachments to the migration machine. This is used in partnership with the AttachmentImportMigrationContext
    • Use AttachementImportMigrationContext processor to import all work items attachments from the migration machine. This is used in partnership with the AttachementExportMigrationContext
    • Use LinkMigrationContext processor to migrate all the work item links, both between work items and external links.
    • Use WorkItemQueryMigrationContext processor to migrate all shared work item queries

This tool has a bunch of other processors dealing with test objects, Git links, teams, etc. as well as various field mapping options as I said this tool is very powerful. We'll cover those in one of the future posts.

 

 

 

CI\CD with SQL Server

I did a presentation back in the spring at my user group TALMUG on SQL Server Data Tools. I enjoyed it so much I am doing it at 3 other user groups.

Canadian Technology Triangle .Net User Group  ‎November‎ ‎22‎, ‎2017

North Toronto .net user Group January 10, 2018

Toronto .Net Meetup February 28, 2018

If you want to learn how to work with SSDT and create a CICD pipeline for your SQL Server Database come on out to one of these meetups.

VSTS Compare Excel Spread Sheets

I have many customers who keep spread sheets in version control for various reasons. Why they do it is not the purpose of this post. The point is about using the Compare feature in TFS/VSTS on Excel Spread sheets. I recently discovered an easy way to compare the difference between two spread sheets, and how to hook that up to Visual Studio so I could right click compare right from Team Explorer.

This is for Office 2016. You can do it for older versions however the location of SpreadSheetCompare.exe may be different.

Here is the trick:

Write a batch file that writes the file names of the two files you want to compare to another file. Then call SpreadSheetCompare.exe passing in the file containing the two file names.

dir %1 /B /S > c:\temp\temp.txt 
dir %2 /B /S >> c:\temp\temp.txt 
"C:\Program Files (x86)\Microsoft Office\Root\Office16\DCF\SPREADSHEETCOMPARE.EXE" "c:\temp\temp.txt"

You can store the batch file in version control that way as long as the users get latest on this file they will have it locally. Or just give it to the people who want to do this and they can put it anywhere on their machine.

Hook this up to the Compare menu item in Team Explorer and VS: In Visual Studio open Tools –> Options, navigate to the “Source Control” section specifically “Visual Studio Team Foundation Server”. Open the “Configure User Tools…” dialog.

Add the .xlsx file extension calling your new batch file and passing in the two files to compare (default behaviour).

image

Now when you right click compare an Excel spread sheet in version control you will launch the SpreadSheetCompareTool that comes with office.

The link is to a video showing that. Which I tried to imbed in my blog but there are issues apparently that I don’t have time to research right now.

VSTS/TFS Pipelines

One of my clients just did some stats for their management team.

In 2017 the teams at this client ran 6000+ Builds and 2000+ automated Releases. It really shows just how much TFS has become a part of their Application Lifecycle.

What is more impressive is that these are not just .NET apps. These builds and releases include technologies such as .NET, SQL Server Databases, Neuron (ESB), Dynamics CRM, SSIS, Duck Creek Technologies, GMC, Master Data Services, SharePoint and some I can't recall right now. It's a great story of TFS getting the job done in a not totally Microsoft environment.

So when someone tells you “We don't use VSTS/TFS because we are not a Microsoft shop”. Ask them what that has to do with it and share this story with them.

witadmin and Visual Studio 2017

Ordinarily, witadmin tool is stored under %programfiles(x86)%\Microsoft Visual Studio XX.0\Common7\IDE path as per https://docs.microsoft.com/en-us/vsts/work/customize/reference/witadmin/witadmin-customize-and-manage-objects-for-tracking-work, but in case of the Visual Studio 2017 it's stored under %programfiles(x86)%\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer. Notice it's now stored in the same folder where all Visual Studio extensions are stored. This makes sense considering that Process Editor is now a Visual Studio extension instead of a separate install/download. It's a small, but important change. Just thought I'd share. Thanks for reading.