I love automation. Automation allows me to manage a large amount of applications, services, and infrastructure. Without automation, the only alternatives for me are putting in a lot of extra time to manually check everything myself or hiring bodies to do that for me. The main problems with any alternative of course is communication and the centralization of undocumented knowledge. I don't want to go too deep down that rabbit hole in this post, but lets just say that scenario is bad.
What do I mean by automation? Automation to me is about the domino effect. I press a button here that then triggers a process which then triggers another process, and so on. Each link in the chain is responsible for specific tasks and the communication of whether those task succeeded or failed. A great example in my day to day is a simple code commit. I write a detailed summary of what I've changed and send that change to a centralized repository which starts the fist trigger. From there, my team is notified of what i changed, the build server is notified for compilation and testing, and the output is automatically deployed. Also known as continuous integration and continuous delivery, really powerful stuff! And with great power comes....I forget the rest, but the point is that communication and accountability are still the key to any good process, automated or not. Whats the point of a code commit triggering a build and deployment if no one knows about it? Well, what a great rhetorical question I just asked myself that I'm going to answer anyway! There isn't.
I, like many, didn't build all of this automation myself. I use a series of great tools to get it done for me. That's not to say that significant time hasn't been spent configuring and filling the gaps, but for the most part finding the right set of tools is everything. The main tool in my belt that inspired me to write this post is HipChat. Like others of its breed, it's primarily an online persistent chat service. Like IRC of old, but for the modern web. What makes HipChat so invaluable to me a my team are its incredible accessibility and extensibility. It's got an app on every major platform, a fantastic open web app, and a simple yet powerful api to integrate with. So all that communication stuff i think is so important, this is where it all happens for me. I love HipChat so much that not only does all chat take place there, but its also what all of my wonderful tools talk to as well. Each link in my automation chain at some point sends information to HipChat so the appropriate people can be informed. Code commits, builds, tests, server alerts, anything that works by itself and has something to say to humans goes to this one central communication hub.
It's not all roses, but where there is an API there is a way. Luckily most of the tools I use have built in support for communicating to HipChat, which is fantastic. However, for services like TFS, there is no one click solution. But like all great services they typically have great API's, and TFS is no exception. So since TFS is such an important tool in my day to day and HipChat is the cornerstone of all communication, I had to get these two services talking. After some investigation, I determined that the easiest and most effective way was to poll the TFS OData API for the changes I'm looking for and then pass that along to the appropriate HipChat room. There was at least one push like alternative that TFS offers, but for my needs it was far too complicated and didn't offer the information I wanted to communicate. So I started a simple project a few months ago called TFSChanges that does essentially what I'm talking about. It queries the OData API for specific projects looking for recent changeset and build information. If found, it formats and pushes that information out to any configured provider...which in this case is only HipChat, though I'm currently adapting it to do more over time as needs and features change. But since this has helped me and my team so much, I decided to spend time adapting the code for open source and released it yesterday. I've written hundreds of little utilities like this over the years, but this is my first attempt at making something that can still serve my proprietary needs but also live on the open web for others to fork and use. Meaning that nothing should be hard coded and all private information and settings need to be scrubbed. Which sounds easy, but I assure you its not. But without going into all the gritty details of scrubbing git history and removing config settings, its done now and I plan to release more mini projects likes this moving forward. I figure that even if one person finds it useful, then its probably worth doing. I know I've counted on and used countless niche open source projects in the past, if only to look at the code for ideas and use in a completely different way. If it helps you automate, then all the better. You can check out the repo here https://github.com/sirkirby/TFSChanges which describes how to get it up and running.