sudo yum update wget http://downloads.sourceforge.net/project/pmd/pmd/5.0.5/pmd-bin-5.0.5.zip cd /usr/local sudo unzip ~/pmd-bin-5.0.5.zipStop the instance, and create a new AMI for Jenkins to use as a slave (and once I've seen it work delete the old AMI and snapshot).
In my ant build.xml I add the necessary bits to run PMD as part of the test process:
<path id="test.classpath"> <path refid="compile.classpath"> <pathelement location="${test.build.dir}"/> <fileset dir="${test.lib.dir}"> <include name="*.jar"> </include> </fileset> <fileset dir="${pmd.path}/lib/"> <include name="*.jar"> </include> </fileset> </path> ... <target depends="prepTest, unitTest, integrationTest, pmd" name="test"> ... <target name="pmd"> <taskdef classname="net.sourceforge.pmd.ant.PMDTask" classpathref="test.classpath" /> <pmd> <sourcelanguage name="java" version="1.7"> <ruleset>rulesets/java/basic.xml</ruleset> <ruleset>rulesets/java/codesize.xml</ruleset> <ruleset>rulesets/java/coupling.xml</ruleset> <formatter tofile="${test.reports.dir}/pmd-results-src.xml" type="xml"/> <fileset dir="${src.dir}"> <include name="**/*.java"> </include> </fileset> </pmd> <pmd> <sourcelanguage name="java" version="1.7"> <ruleset>rulesets/java/basic.xml</ruleset> <ruleset>rulesets/java/junit.xml</ruleset> <formatter tofile="${test.reports.dir}/pmd-results-testsrc.xml" type="xml"> <fileset dir="${test.src.dir}"> <include name="**/*.java"> </include> </fileset> </pmd> </target>
Note the ${pmd.path} variable in build.xml. This is set up as a system specific config, to allow things to move about. On a development machine these things may be all over the place. In this case a host-specific build.properties file is referenced. However, a file with the hostname in is fundamentally broken when using on-demand EC2 instances for Jenkins - or, more generally, when deploying across multiple similar nodes. In these cases we can call ant with arguments, e.g. ant test -propertyfile jenkins.build.properties. The latter approach doesn't work for NetBeans as I can't find a way to get -propertyfile to be passed in. Because properties cannot be overridden and properties files get loaded first this can be made to work tidily, even with a fallback default properties file as a third option for any properties that have been missed by the argument or host-specific files. The bit of ant config which does this is:
<exec executable="hostname" outputproperty="computer.hostname"> <arg value="-s"></arg> </exec> <property file="${computer.hostname}.build.properties"/>
In Jenkins, add the PMD plugin and in the job configuration tell it how to find the PMD test reports, at test/reports/pmd*.xml
Rebuild.
Cringe at the 1,042 warnings. Mostly some apparently dodgy calls to logging.
No comments:
Post a Comment