Bamboo PMD/Checkstyle integration

I'm trying to get Bamboo running pmd, checkstyle and other static analysis tools. The plugins listed in the market place are really out of date, and when I looked into the Sonar Tasks plugin it seems just a bit behind the version (4.3 and I'm running 4.4.4). I'd really like to get these incorporated into our CI process but there seems to be a gap in what is currently provided. Does anyone have any insight on how this could be done using whats available today?

Thanks.

3 answers

1 accepted

Since the Sonar Tasks plugin was managed by a third party, I had to wait until the release for that software supported my current version. As they were undergoing a major overhaul to support Bamboo 5.0 at the time, it took a bit longer than I would have liked. The support for the typical parsers seems a bit lacking, but as long as there are outside parties providing the functionality I need things should be fine.

I would also like to add that the Sonar plug for Bamboo has been working really well and seems to meet all of our needs for state code analysis.

I'm going to give an answer, although it isn't a very good one, it is the best I've been able to find. I'm also not familiar with the precise tools you are using, though I suspect this approach will work, given enough massaging.

We use cppcheck for our static analysis. The cppcheck executable (and dll) are checked into the source repository (you can use a separate /tools folder to keep things discrete).

We have a ruby (substitute a scripting language of your choice) script that handles actually running cppcheck with the appropriate arguments. (It also includes some clever logic to run things in parallel, although that's not necessary.)

In rubyesque pseudocode, the master script looks like this:

all_files = get_all_files() # Reads the build scripts to find all the files that are relevant to the project.
all_files.each {|file|
    output_base = static_analysis_ouput/"+strip_filename(file)
    run_cppcheck(file, output_base + ".txt")
    convert_to_junit_xml(output_base + ".txt", output_base + ".xml")
}

Of course, the get_all_files() function will depend on your project and may or may not be as simple as ours. Our projects build with msbuild, so we just use an xml parser to read them and get the source filenames.

Since it looks like you use Java, you may be able to skip the convert_to_junit_xml() call, if your tools output JUnit tests directly. What I do is have it convert each file to a single unit test. If the txt file has no static analysis warnings, then I issue a successful unit test. Otherwise, I include the text of the failures as the output of the test and mark the test as failed.

So each xml file looks like one of these:

Success

<testsuites tests='1' failures='0' disabled='0' errors='0' time='0' name='FailedCppChecks'>
 <testsuite name='FailedCppCheck' tests='1' failures='0' disabled='0' errors='0' time='0'>
  <testcase name='derived.from.file' status='run' time='0' classname='CppCheck'/>
 </testsuite>
</testsuites>

Failure

<testsuites tests='1' failures='1' disabled='0' errors='0' time='0' name='FailedCppChecks'>
 <testsuite name='FailedCppCheck' tests='1' failures='1' disabled='0' errors='0' time='0'>
  <testcase name='derived.from.file' status='run' time='0' classname='CppCheck'>
   <failure message='{number of static analysis warnings} failures' type=''>{text of static analysis warnings}</failure>
  </testcase>
 </testsuite>
</testsuites

By converting each file to a single unit test (with a name derived from the file), I get a predictable set of "unit tests". If I decide that a particular file isn't worth fixing yet, I can quarantine it. (Not a great solution, since the introduction of new warnings in that file will go unnoticed.) Also, if you have too many unit tests, Bamboo gets more than a little slow accessing those pages.

I truly hope this isn't the best answer you get, because it isn't very good and requires a fair bit of work on your part to implement and maintain. But it works for me and it is better than no answer at all.

I am providing two addons, View Checkstyle/CodeSniffer supports Checkstyle, PHP_CodeSniffer, and others, View PMD-pmd/PHPMD (mess detector) supports PMD and PHPMD. CPD will come soon, have a look at my Marketplace vendor page.

Suggest an answer

Log in or Sign up to answer
Atlassian Community Anniversary

Happy Anniversary, Atlassian Community!

This community is celebrating its one-year anniversary and Atlassian co-founder Mike Cannon-Brookes has all the feels.

Read more
Community showcase
Renan Battaglin
Published May 18, 2017 in Bamboo

FAQ: How to Upgrade Bamboo Server

Bamboo 5.9 will no longer be supported after June 12, 2017. What does this mean? As part of our End of Life policy, Atlassian supports major versions for two years after the first major iteratio...

1,489 views 0 5
Read article

Atlassian User Groups

Connect with like-minded Atlassian users at free events near you!

Find a group

Connect with like-minded Atlassian users at free events near you!

Find my local user group

Unfortunately there are no AUG chapters near you at the moment.

Start an AUG

You're one step closer to meeting fellow Atlassian users at your local meet up. Learn more about AUGs

Groups near you