Filed Under (General) by Ryan Christiansen on 01-19-2009

I’m sure many of you are familiar with what it means to eat your own dog food. Put simply, and you can quote me…

Any developer that won’t use his own project shouldn’t be surprised when no one else will either.

With that said, I do my best to apply FUnit and it’s support libraries wherever possible. This has resulted in direct improvements to code quality, user experience, and extensibility. Here are just a few ways this approach has helped already:

  • Find bugs earlier in the deployment cycle.
  • Identify confusing or weak areas of usability.
  • Remove unnecessary or redundant APIs.

Build Automation – Just to Name A Few…

Over the past couple weeks, I have improved support for third-party build management tools such as TeamCity, Cruise, and Maven. Although TeamCity and Cruise (the makers of the open-source project CruiseControl) are commercial products, both provide very powerful free editions as well. Maven on the other hand is fully open-source and is gaining momentum in the development community.

Commercial vs. Open Source

Being less experienced in automation and server technologies, I’m a perfect test subject for ease of use. I could probably write an entire article on the semantics of free vs. commercial software so I’ll keep it brief.

So do I prefer commercial or open source? well both… it depends. Solutions are not better just because they’re free any more than commercial products are better because of financial backing. There are plenty of examples of all cases. Subversion and TortoiseSVN are a great examples of a successful open source projects that i love. InstallShield on the other hand is an expensive, bloated, metastasized ball of corrosive goo that has managed to break the simplest (previously working) installers without changing a single line of code … but I digress … rant.close();

Choosing a Continuous Integration Server

My first instinct was to try Maven. I wanted to choose something I felt the community would already be using. Unfortunately, not having used it before, I found Maven difficult to pick up despite relatively good documentation and community examples. It is important to note, however, that there is great progress being made in this arena for Flex development with projects like flex-mojos. Therefore, I will be revisiting Maven in the future to ensure it is supported properly.

There are two specific things made me favor TeamCity and Cruise over Maven.

  • Once installed it just works with no additional configuration.
  • The web interface made management of build scripts simple and intuitive.

But the real deal-maker for TeamCity was something called Remote Run. Remote Run allows developers to trigger personal builds of local changes directly from their development IDE (Eclipse, VisualStudio, or IntelliJ IDEA). Here’s the best part, you don’t have to commit your changes to version control to run your build remotely. How cool is that?

This may not seem like a big deal when you’re talking about smaller project you can test locally. But it is a big deal for complex builds that require automation to be tested. What if you need to modify the build scripts? What if you change your build dependencies? What if you have multiple developers on the project? If you break the build in SVN, you hurt progress for everybody.

You don’t want to commit something unless you know it works. For this there is a second feature to Remote Run called Pre-Tested Commit. This will automatically commit your selected changes if and only if they can be build successfully on the server.

Yeah… I like TeamCity… a lot.

And the winner is… TeamCity

You can log in as a guest to my project’s build automation and deployment server below or from the community links in the sidebar.

Login here: FUnit Build Automation Dashboard

You will have access to build Artifacts and FUnit test statistics. This includes compiled binary, asdocs, distributions, source files, and nightly builds. Just in case you missed it, yes FUnit is fully integrated and maintains detailed UI records of all executed tests.

Note: The TeamCity server instance is currently hosted by my development machine from home. Until I can buy a second dedicated box and somehow acquire a legal copy of Windows Server 2003 R2 or 2008, I can’t guarantee it’s reliability. Although TeamCity is available for Linux and Mac OSX as well, I would prefer a Windows server.

Post a comment