Redirecting TFS traffic from /tfs to / root site

A while back I wrote a blog post on how to get rid of /tfs in TFS URL. Now, I would like to expand on that blog post and write about how to redirect TFS traffic from /tfs to / root of the site once you got rid of /tfs from the URL. To do that you need to do the following:

  1. Install URLRewrite module from https://www.iis.net/downloads/microsoft/url-rewrite
  2. Add the following section to the web.config of the TFS server

    <rewrite>

      <rules>

                <clear />

                <rule name="Redirect HTTP to HTTPS" enabled="true" stopProcessing="true">

                    <match url="(.*)" ignoreCase="true" />

                    <conditions logicalGrouping="MatchAll" trackAllCaptures="true">

                        <add input="{HTTPS}" pattern="off" />

                        <add input="{HTTP_HOST}" pattern="([^/:]*?):[^/]*?" />

                    </conditions>

                    <action type="Redirect" url="https://TFSURL.FQDN/{R:1}" appendQueryString="false" />

                </rule>

                <rule name="Redirect TFS traffic" stopProcessing="true">

                    <match url="tfs\/(.*)" />

                    <action type="Redirect" url="https:// TFSURL.FQDN /{R:1}" appendQueryString="false" />

                </rule>

      </rules>

    </rewrite>

 

First rule is redirecting all traffic to HTTPS, and second rule redirects all /tfs traffic to / root site of the TFS. If you don't have HTTPS, then simply remove the first rule and replace HTTPS with HTTP in the second. Obviously, replace TFSRUL.FQDN with your TFS public URL.

Installing Git from source on RedHat Linux machine

When you do DevOps work, you deal with all kinds of tools and operating systems. Today, we'll talk about Linux and Git. With my Linux days behind me (or in front of me because you never know where technology will go), I was surprised that yum update git command did not update Git client on Linux box. After a bit of digging, I've found out what do you need to do to upgrade Git client on Linux.

Uninstall existing Git client:

sudo yum remove git

 

Install dependencies:

sudo yum install curl-devel expat-devel gettext-devel

sudo yum install gcc openssl-devel zlib-devel perl-ExtUtils-MakeMaker

 

Install Git:

cd /usr/src

wget https://www.kernel.org/pub/software/scm/git/git-2.16.2.tar.gz (feel free to substitute this link with the link to the other version of Git client)

tar xzf git-2.16.2.tar.gz

cd git-2.16.2

sudo make prefix=/usr/local/git all

sudo make prefix=/usr/local/git install

sudo –i

echo "export PATH=$PATH:/usr/local/git/bin" >> /etc/bashrc

exit

source /etc/bashrc

 

That's it. Check the version of Git client by running "git –version". You should get: git version 2.16.2

By the way, these steps should also on Linux CentOS and Fedora (and any other ReadHat Linux flavour out there)

Global DevOps Bootcamp 2018

Global DevOps Bootcamp is back in Toronto. It will take place on June 16, 2018 at ObjectSharp office in downtown Toronto. The Global DevOps Bootcamp takes place once a year on venues all over the world. I simply had way too much fun and learn way too many new things during the event, so I had to do it again this year. It will be bigger and better this time around. This event is all about DevOps on the Microsoft Stack. It shows the latest DevOps trends and insights in modern technologies. It is an amazing combination between getting your hands dirty and sharing experience and knowledge in VSTS, Azure, DevOps with other community members.

Before I get into the details of the event, I would like to emphasize that this is a very technically challenging event. If you expect a lecture on DevOps or a step by step instructions on how to do DevOps, this is NOT the event for you. But, if you don't mind getting your hands and learning new DevOps related tools and processes by doing (with some slight guidance from our expert proctors) then this event is the best place for you. Please register at https://www.eventbrite.com/e/global-devops-bootcamp-2018-objectsharp-tickets-41970018455. Please note that the spaces are limited, so please register if you plan to attend and learn. If you're unsure, please be nice and do not take a spot from someone else who really might benefit from attending this event. We put a LOT of work into this event, and we want everyone to get the most out of it.

The theme for DevOps Bootcamp this year is "From one release per month to multiple releases a day. Applied modern release patterns and practices." This time the event is all about DevOps and improving your release cadence. It will help you understand the latest DevOps trends and insights in modern technologies that enable you to release multiple times per day. It is an amazing combination between getting your hands dirty and sharing experience and knowledge around VSTS, Azure, DevOps with other community members.

Agenda (preliminary)

10:00:    Kickoff

10:15:     Keynote by Microsoft

10:30:     Keynote 2: Breaking down the Monolith

11:15:     Break

11:30:     Hackathon/HandsOn DevOps challenges. The hands-on part with be based on a common application where we try to solve as many challenges as possible, including ideas like

  • How to containerize an existing application
  • How to add telemetry (app insights) to the application and gather hypothesis information
  • How to use telemetry to monitor availability
  • How to use feature toggles to move application into production without disrupting end users
  • How to use release gates
  • How to make DB schema changes
  • Use Blue Green Deployments

13:00:     Lunch

13:30:     Hackathon/HandsOn DevOps challenges (cont.)

16:00:     Team presentations, prize draw

17:00:     Wrap-up

 

Hope to see you there.

Oh, almost forgot, please remember that this is also a competition. The participants will be broken down into teams which will compete against not only each other, but also against thousands of participants around the world. Nor pressure, but bring your "A" game

Toronto IT Pro Cloud and DevOps Summit

I'm helping organizing one of the first Azure and DevOps event that is centered around the IT Pro in Toronto area. We'll be delivering free training on an array of topics to help IT Professionals better understand technologies such as Azure Automation/ Desired State Configuration, Azure Site Recovery, Dev Test Labs, VSTS, Azure Security Center, and more. This will be a full day event to drive the following objectives:

  • Understand Azure technologies and learn how to use them in your workplace.
  • Understand the Culture, Automation, Measurement, and Sharing aspects of DevOps and how it pertains to your IT Organization.
  • Network with other members of the community and partners to share ideas and discuss challenges.

It should be fun. To register for the event go to: https://www.eventbrite.com/e/toronto-it-pro-cloud-and-devops-summit-tickets-44034859450

Azure DevOps Projects

I will be speaking at Global Azure Bootcamp Toronto (well, Mississauga to be exact) on April 21st, 2018. The topic will be DevOps Projects. Azure DevOps Projects. That thing that makes it a lot easier to deploy to Azure through VSTS. Should be fun. Go ahead and register at https://www.meetup.com/metrotorontoug/events/247597822/. See you there.

I thought I'd share the description:

IT world changes fast. Very fast. But Azure, and cloud in general, moves even faster. A lot faster. This requires learning latest technologies, using them in your product and deploying at a faster pace. With digital transformation efforts in full swing across enterprises in nearly every industry, developers are driven harder than ever to speed up application releases. In the process, they also want to ensure quality and security and to manage these apps more efficiently. This is where DevOps becomes critical and where a simplified way to get started with DevOps could be useful. Microsoft's new Azure DevOps Projects tool lets developers configure a DevOps pipeline and connect it to the cloud with no prior knowledge of how to do so.

The Azure DevOps Project presents a simplified experience which creates Azure resources and sets up a continuous integration (CI) and continuous delivery (CD) pipeline for when you are developing a .NET, Java, Node, PHP, or a Python app, or whether you are targeting app services, virtual machines, or containers in Azure using Visual Studio Team Services (VSTS) behind the scenes. DevOps Projects help you get up and running with a new app and a full DevOps pipeline in just a few minutes. Azure DevOps Project helps you launch an app on an Azure App Service of your choice in a few quick steps and set you up with everything you need for developing, deploying, and monitoring your app. Creating a DevOps Project provisions Azure resources and comes with a Git code repository, Application Insights integration and a continuous delivery pipeline setup to deploy to Azure. The DevOps Project dashboard lets you monitor code commits, builds and, deployments, from a single view in the Azure portal.

Create your application and release pipeline on any Azure service in just three steps—simply select an application language, a runtime, and an Azure service. Start small and scale up as needed using Azure DevOps Projects.

Deploy SSIS packages in VSTS/TFS

If you need to deploy SSIS packages using VSTS/TFS, try using the following build task: https://marketplace.visualstudio.com/items?itemName=automagically.SSISDeployPackage

The task allows you to deploy ISPAC file to SSIS instance. When deploying you need to specify:

  • path to .ispac file to be deployed
  • name of the catalog folder where the package will be deployed
  • name of SSIS server where the package will be deployed
  • name of the SSIS project
  • name of the SSIS environment
  • project and package parameters to ignore during the deployment

Also, the task allows you to deploy SSIS package using a remote machine. To deploy SSIS package using remote machine, make sure Authentication required checkbox checked and specify:

  • name of the remote server to use to deploy SSIS package
  • remote user account
  • and remote user password
  • Oh yes, and you have an option to connect to remote machine using SSL, if you want

 

Have fun.

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?

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.

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.