Thursday, 22 September 2016

A pragmatic look at why TFS and VSTS can be customised in a different way

If you paid attention to the latest releases of both TFS and VSTS you can see that the main path where they are diverging is on Process Template Customisation.

And hey presto! I was asked why, and why is it that different from the usual TFS experience. So here is my opinion on the matter Smile

Historically, *no* customisations were allowed for Team Projects hosted on the service. The reason behind this was very pragmatic: being a service, the provider must ensure that any upgrade are not going to break the system for its users, and that includes customisations as well.

Enabling the typical task witadmin.exe can do means they can’t ensure that “the trick you used with Global Lists to show something on a certain field” is going to continue working, with no changes, for each upgrade the service receives without testing it. And of course, the service provider neither can test users’ customisations nor rely on users to test their own customisations according to the service release schedule. It wouldn’t work, and it would cause unnecessary churn and technical debt.

Normally – and this applies to Team Foundation Server as well – you would test your customisations in a sandbox or a test environment. With your own on-premise product you can duplicate the instance (especially with the new pre-production upgrade feature) and start messing around with it. It makes total sense, because hardware is cheap as chips these days and you (or the admins) are responsible for the uptime and availability of the server.

But you can’t have it and you can’t do it on the service, there is no test environment, a service is live by definition! Even with DevOps properly in place there is no way of providing this with the appropriate safeguards.

There is a major difference between providing APIs to extend specific components of your service (usually with a limited scope) and providing a way to easily customise the overall user experience. This difference sometimes is overlooked (unfortunately) when in full-swing with the DevOps infatuation: introducing breaking changes (because you will, everybody does, at some point) on a large portion of the user experience that non-technical users will face is something to are going to regret, because non-technical users are usually more vocal and reactive to UX changes.

UX changes aren’t like custom release task using the VSTS APIs “somehow”, they are all about consistency in the overall experience a user has, and it is critical to understand what is going to happen the second you break something you can see. Can you imagine the mayhem when a non-technical user, who heavily relies on that customisation, is going to get an error and his critical feature isn’t there anymore?

It was the right decision, because the team was missing a way of funneling the customisations in a sanitised and reliable way.

But now they have! And they are doing a great job at enabling these Process Customisation scenarios – usually a big blocker in Enterprise situations.

Friday, 9 September 2016

Simplifying TFS restores with TFSConfig OfflineDetach

Before TFS 2015 Update 3, if you want to restore an instance you need to restore all the collection databases of the instance. This might be an extremely long and time-consuming activity.

Very quietly, Microsoft introduced the OfflineDetach command for TFSConfig. What is that?

It is a new command you can use to restore only a specific collection (and configuration database) so you can simplify the restore operation and save time.

Aside from that, you can also use it to restore non-detached databases (useful for DR).

Thursday, 18 August 2016

SonarQube 6.0 and the StyleCop plugin

For one of our projects we use the StyleCop plugin for SonarQube during the analysis. As you can see it was recently deprecated.

I successfully updated the instance used by this product to SonarQube 6.0, when I was told an exception was raised while building:

image

To make things worse, there are no workarounds or quick fixes to unblock it as you can see from here. The reason behind this is because it isn’t using the .NET Compiler Platform.

Long story short – the plugin is deprecated and it won’t work with SonarQube 6.0. You can either disable the plugin and keep SonarQube 6.0 running or revert back to SonarQube 5.6.1.

Friday, 12 August 2016

SonarQube analysis of Java code with VSTS

As we know, we can use VSTS to build Java code as well as .NET code thanks to the Maven instance provided by the service. It is one of the reasons why we can forget about the build engine with VSTS – it just works.

If I use Maven on VSTS I don’t even need to add a SonarQube task in the Build Definition. All I need to do is to tick the checkbox and point Maven to my SonarQube instance:

image

This is literally all I have to do. Maven is already configured so I will get my SonarQube analysis in two clicks:

image

Wednesday, 10 August 2016

Package Management in TFS15 RC1

If there was a missing feature in TFS 2015, it was the lack of an integrated Package Management solution. Long are these days, the Package Management extension is bundled in TFS 15 RC1!

You just need to install it via your Local Extension Gallery and you are good to go:

imageimage

You can then create a new feed:

image

and you are going to get a very nice guidance page to get started:

image

These are the default permissions:

image

After that you’ll add the feed as usual in Visual Studio:

image

so you can start pushing something up there!

image

Delivery of stuff via NuGet package is more and more frequent these days and you had to rely on a third-party tool like ProGet (on-premises) or MyGet (in the cloud). It is great to have it integrated in Team Foundation Server, extending the ALM platform with out-of-the-box features.

Tuesday, 9 August 2016

Metatasks in TFS 15 RC1

It isn’t really about TFS 15 RC1 this time, but now the UI is totally out for it so it is very prominent Smile there is a very nice feature I usually see being overlooked when talking about the new build: meta-tasks.

Meta-tasks were added a couple of weeks ago to the service, and they are a very easy way of collating a set of tasks you keep repeating in your build definitions.

For example, let’s say you start a VM and then extract files to it all the times:

meta0

You can group this as a meta-task so you can reuse this set of tasks elsewhere:

meta1

meta2

Once a meta-task is created its configuration is retained, so you can just drop the meta-task in the definition and you are ready to go!

meta3

meta4

Meta-tasks can be managed in the same hub as Build and Release Definitions…

meta5

…and they come with their own set of ACLs, so you can restrict access to them if you want.

meta7

The very nice side effect is that once you start creating your meta-tasks and make them available to the team, you can start bringing a new Definition up to speed very quickly because you already have some building blocks to use instead of relying on heavy documentation and long configurations with variables and such.

Friday, 5 August 2016

Easy HTTPS with TFS 15 RC1

There are a number of changes in TFS 15 RC1, and one I really like is the HTTPS configuration.

When you configure the Application Tier you can now select the bindings you want:

https0

Clicking on the dropdown shows all the configurations – HTTP, HTTPS or both:

https1

with the possibility of selecting the certificate straight from the wizard!

clip_image002

You can also change the bindings, the virtual directory and the URL if needed:

image

It is just a convenience, true, but it is really handy to use instead of doing thisSmile