Visual Studio Team Services – formerly known as Visual Studio Online – is not just a cloud based version of Team Foundation Server and platform of Microsoft’s DevOps Story. It also is an integration platform. In fact, this is what you should expect from any kind of platform that claims to be part of a development lifecylce.
Extensibility and integration of external 3rd party tools and services has always been a requirement and has been around in Team Foundation Server for a pretty long time. Do you remember the Visual Studio 2010 “Stadium” diagramm below? The green extensibilty component on the right already pointed out that TFS is not a tool that claims to be the one and only but instead it wants to make sure it integrates with whatever you’re using currently.
Integration of tools can be hairy and it always will lead to some kind of additional overhead. What happens if one tool of your toolchain gets an update? Will the toolchain break? Who ensures api compatibility? But that’s part of the deal and it’s in the responsibilty of tool providers to care about this on an API level. But it’s our own responsibilty if we set up our custom tool chain to make sure thinks work after we update one of it’s components.
A customer scenario
Back to Visual Studio Team Services: One of our customers’ scenario looks like this (I left out some detailed specifics to make this more useful to a broader reader base).
- Target application is a mobile app for iOS, Android and Windows based on Xamarin
- Source Control System is hosted on Bitbucket
- Build definition is based on Cake
- SonarQube analysis will be executed during build
- For team communication HipChat is being used and the toolchain should be able to post a status message into a certain room in HipChat
- After successful creation of the application the package shall be provided in HockeyApp
- All of this should work automatically without manual interaction based on a commit to the repository
So here’s an image that demonstrates the scenario.
I set up an End-To-End scenario for all of this with a very simple sample app to show that it works. The following posts will cover the necessary steps in detail.
For the unpatient: It works and it isn’t that hard to do. However of course there are some places where you might configure things incorrectly and then nothing works. If you’re working on a similar scenario the upcoming posts might be helpful for you.