Friday 8 April 2011

Plugins for .NET Builds (Part 1)

Welcome to the second installment of the JenkinsHeaven blog.

The way life is panning out currently it looks like I will be able to produce these once a week - Just like a Jenkins release.

Last week I said that this week was about installing plugins. I will briefly touch on the process of installing plugins via the UpdateCenter. Only a brief explanation is needed as is very straight forward, as you will see and is really only included in the interests of completeness.

More importantly, I want to do two things

  1. Cover the key plugins that will turn Jenkins into a .NET platform.
  2. Recommend some other plugins even though not being REQUIRED to be able to do .NET builds

I intend that future blogs will dig even deeper into some of these plugins.

Installing Plugins

  1. Click on Manage Jenkins in the LHS menu
  2. Click on Manage Plugins link

At this point you are presented with 4 tabs. Updates, Available, Installed and Advanced.

  1. I will discuss Updates and Advanced tabs in another post. Available and Installed tabs should be self explanatory.
  2. Click on the Available tab
  3. Click the checkbox next to the plugin or plugins you wish to install
  4. Scroll to the bottom of the page and click the install button
  5. Wait for the plugin to install
  6. (If you read my blog last week :)) you will be able to click the "Restart When No Jobs Are Running" button

Whenever I install a new instance of Jenkins somewhere these are the first plugins I install:

MSBuild

This is a must. This plugin lets you tell Jenkins where MSBuild.exe is and integrates it into the job configuration page.

NUnit

Execute tests (Unit, Integration and Functional) One of the many XUnit frameworks. The best known and most used in the Java community probably being JUnit. NUnit is essentially JUnit for .NET by virtue that it is for C#.

Hudson Violations plugin

Eventually we will get around to eradicating all references to that other "corporatised" butler from the Jenkins codebase - but I digress.

This plug-in generates reports for static code violation detectors such as fxcop, stylecop and simian, among others

Static Analysis Collector Plug-in

This plug-in collects the different analysis results and shows the results in a combined trend graph. Of the supported plugins, Dry, PMD, Task Scanner and Warnings are relevant to .NET environments.

Static Analysis Utilities

Also known as the analysis-core utility plugin, this functionality was rearchitected and separated into a plugin. This plugin is now a required prerequisite for the Static Code analysis plugins (https://wiki.jenkins-ci.org/display/JENKINS/Static+Code+Analysis+Plug-ins).

Warnings Plug-in

This plugin will scan your source code files and report on compiler warnings as the name implies. The Jenkins WIKI provides more information on the trend graphs that can be used with this and the other Static Analysis plugins.

Jenkins Selenium Plugin

I just love this plugin. My clients fall into 2 categories:

  1. Those that are still in working in the dark ages (20th century) and do not have an CI as part of their development process.
  2. Those that are using Jenkins but only as a scheduled build tool, which misses the point of CI.

Verifiability of a build is a basic tenet of Continuous Integration. How is a build made verifiable? With tests! Unit, integration and functional. The more the better. This is a topic for another blog post all on its own but this is worth unpacking a little. If you are only doing scheduled builds with no tests the only piece of information you will be able to yield from the build is that the system will compile. While that's something (and better than nothing) its also not that much. The real value comes (and confidence levels rise) when all the potential runtime errors have been mitigated with unit, integration and functional tests that have passed.

I use the Selenium plugin for my functional web tests (written in C#) and NUnit as my test runner. If any test fails the build is failed. That's the way it should be.

Other great plugins (not .NET related)

(I was going to call this section "Best of the Rest", but that would be unfair as there are so many great plugins and new ones every week.)

Jenkins Continuous Integration game

How does your shop keep score of who has broken the build? I remember when it used to be IIII and a cross for 5 on a piece of paper. No need for that anymore - It's the 21st century. Throw the pencil and paper away.

Hudson disk-usage plugin

Provides a graph on a job's build summary page showing how much disk space used by the build and how much space is used during the workspace.

Drop Down ViewsTabBar Plugin

This is the one I am currently using.

Nested View Plugin

Cleaner if you have lots of jobs.

Emotional Jenkins plugin.

Bit of fun eye candy - Jenkins gets upset when the build is broken

Green Balls

Green Balls are just better than Blue. (please no comments about this unfortunate pun)

ThinBackup

Those of you who subscribe to the DEV-list may recall my (EXTREMELY sleep deprived) page and half email on my 24-hour session to rebuild my box from the ground up (again). ThinBackup currently appears to be the best free backup plugin for Jenkins. Kohsuke has another one available if you pay $$ to Cloudbees. The original "Backup plugin" took too long to run and created too big a file to be useful. ThinBackup saved my bacon and as a result of my email we all benefited from a couple of key bug fixes. Many thanks to @tofuatjava for those fixes.

Please feel free to let me know if I ever make an assertion that you disagree with (quite possibly I am incorrect.). All effort is taken to try and get facts straight.

Come visit my other site at fullcirclesolutions.com.au. All my best ideas are distilled into commercial tools and made available for purchase.

Till next time....

4 comments:

  1. It is always good to see what plugins other Jenkins users are using!!! Thanks for sharing it.

    ReplyDelete
  2. Great post Andrew. You have introduced me to a new plugin, the "Drop Down ViewsTabBar Plugin" which will be really useful for clients that have hundreds of jobs.

    Cheers, Geoff

    ReplyDelete
  3. In response to Geoff's comment. If you have hundreds of jobs I would have thought that the Nested View plugin was a better choice than the Drop Down ViewsTabBar Plugin.

    Both Apache and JBoss are using the Nested View plugin:
    https://builds.apache.org/hudson/
    http://hudson.jboss.org/hudson

    Personally I am currently using the Drop Down ViewsTabBar Plugin as I have about 20 jobs, that I organise into related sets of about 5 views. Beyond this number of views and the Nested View plugin becomes a better choice (I think) for clean navigation.

    ReplyDelete
  4. Great Post man, I have been doing CI for three years now with Cruise Server (not Cruise Control), Hudson, and now with Jenkins...all in the Java/Javascript world.
    Now, I have cause to embark on CI in the .Net toolset and you have lifted my spirits!
    Thanks bro! :-)

    ReplyDelete