<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:yt="http://gdata.youtube.com/schemas/2007" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
   <channel>
      <title>Jenkins blogs</title>
      <description>Pipes Output</description>
      <link>http://pipes.yahoo.com/pipes/pipe.info?_id=jLGuq2bi2xGE_YKmjUnRlg</link>
      <atom:link rel="next" href="http://pipes.yahoo.com/pipes/pipe.run?_id=jLGuq2bi2xGE_YKmjUnRlg&amp;_render=rss&amp;page=2" />
      <pubDate>Fri, 10 Feb 2012 10:02:26 +0000</pubDate>
      <generator>http://pipes.yahoo.com/pipes/</generator>
      <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/KohsukesHudsonBlogs" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="kohsukeshudsonblogs" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">KohsukesHudsonBlogs</feedburner:emailServiceId><feedburner:feedburnerHostname xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://feedburner.google.com</feedburner:feedburnerHostname><item>
         <title>Happy birthday Jenkins!</title>
         <link>http://feedproxy.google.com/~r/ContinuousBlog/~3/VBUzg3jPYfk/happy-birthday-jenkins</link>
         <description>&lt;p&gt;On February 2nd, 2011 the first release of Jenkins, version 1.396, was made available for public consumption. Thus marking a new beginning for many of us who had come to rely on this very versatile piece of software and wanted to see it continue to thrive.&lt;/p&gt;

&lt;p&gt;Along with some other bug fixes, the 1.396 release of Jenkins included a &lt;em&gt;very&lt;/em&gt; important changelog item:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;em&gt;Fixed a trademark bug that caused a considerable fiasco by renaming to Jenkins&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;On behalf of the core Jenkins team and the governance board I would like to extend a extremely large &lt;big&gt;&lt;strong&gt;Thank You!&lt;/strong&gt;&lt;/big&gt; to all of the &lt;a rel="nofollow" target="_blank" href="https://github.com/jenkinsci"&gt;plugin developers&lt;/a&gt;, &lt;a rel="nofollow" target="_blank" href="https://issues.jenkins-ci.org"&gt;bug filers&lt;/a&gt;, &lt;a rel="nofollow" target="_blank" href="https://wiki.jenkins-ci.org"&gt;wiki page editors&lt;/a&gt;, &lt;a rel="nofollow" target="_blank" href="http://www.wakaleo.com/books/jenkins-the-definitive-guide"&gt;book authors&lt;/a&gt; and the users who have helped grow Jenkins into the project it is today.&lt;/p&gt;

&lt;p&gt;Some of the tidbits from our highlight reel:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;As of this writing there have been &lt;strong&gt;54&lt;/strong&gt; releases of Jenkins&lt;/li&gt;
&lt;li&gt;Jenkins now supports &lt;a rel="nofollow"&gt;writing plugins in Ruby&lt;/a&gt; as well as Java (more languages in the process)&lt;/li&gt;
&lt;li&gt;We have &lt;a rel="nofollow" target="_blank" href="http://mirrors.jenkins-ci.org/status.html"&gt;7 high-speed mirrors&lt;/a&gt; streaming Jenkins packages to users around the world.&lt;/li&gt;
&lt;li&gt;There are now over 450 different plugins available for Jenkins&lt;/li&gt;
&lt;li&gt;Over 80 donors participated in our &lt;a rel="nofollow"&gt;end of year fundraising drive&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;5 "Long Term Support" releases have been published by the Jenkins community, offering users a slower moving upgrade target (supported even further by CloudBees' &lt;a rel="nofollow" target="_blank" href="http://www.cloudbees.com/jenkins-enterprise-by-cloudbees-available-plugins.cb"&gt;Enterprise Jenkins&lt;/a&gt; product)&lt;/li&gt;
&lt;li&gt;Public project governance meetings are held and &lt;a rel="nofollow" target="_blank" href="http://meetings.jenkins-ci.org/jenkins/"&gt;recorded&lt;/a&gt; (almost) every couple of weeks.&lt;/li&gt;
&lt;li&gt;More than 340 individuals contribute &lt;a rel="nofollow" target="_blank" href="https://github.com/jenkinsci"&gt;on GitHub&lt;/a&gt; to the project in some form or another.&lt;/li&gt;
&lt;li&gt;About 750 members of the &lt;a rel="nofollow" target="_blank" href="https://groups.google.com/group/jenkinsci-dev?lnk="&gt;developers mailing list&lt;/a&gt; and around 1700 on the &lt;a rel="nofollow" target="_blank" href="https://groups.google.com/group/jenkinsci-users?lnk="&gt;users mailing list&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There are many other impressive sounding numbers I could rattle off, but the list is far too long to be interesting.&lt;/p&gt;

&lt;p&gt;The project isn't perfect and nor is the software, but we're off to a fine start and I hope you'll join us in making this next year of Jenkins even better than the first.&lt;/p&gt;

&lt;img src="http://feeds.feedburner.com/~r/ContinuousBlog/~4/VBUzg3jPYfk" height="1" width="1"/&gt;</description>
         <guid isPermaLink="false">371 at http://jenkins-ci.org</guid>
         <pubDate>Thu, 02 Feb 2012 09:08:25 +0000</pubDate>
      </item>
      <item>
         <title>Highlight video from JUC 2011</title>
         <link>http://feedproxy.google.com/~r/ContinuousBlog/~3/GHP7t2ReS2E/highlight-video-juc-2011</link>
         <description>&lt;p&gt;A slick highlight video from the &lt;a rel="nofollow"&gt;Jenkins User Conference, 2011&lt;/a&gt; was posted recently which captures some great quotes from a number of the fantastic speakers who participated in the inaugural JUC.&lt;/p&gt;

&lt;p&gt;I've embedded the video below, enjoy!&lt;/p&gt;

&lt;p&gt;&lt;center&gt;&lt;/p&gt;

 

&lt;p&gt;&lt;/center&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ContinuousBlog/~4/GHP7t2ReS2E" height="1" width="1"/&gt;</description>
         <guid isPermaLink="false">370 at http://jenkins-ci.org</guid>
         <pubDate>Fri, 20 Jan 2012 08:00:00 +0000</pubDate>
      </item>
      <item>
         <title>Jenkins at FOSDEM 2012</title>
         <link>http://feedproxy.google.com/~r/ContinuousBlog/~3/QVRpksYLGrE/jenkins-fosdem-2012</link>
         <description>&lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://fosdem.org"&gt;&lt;img src="http://agentdero.cachefly.net/continuousblog/images/fosdem-brain.jpg" align="right" width="180" alt="Fill your brain at FOSDEM!"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Shortly after the &lt;a rel="nofollow"&gt;Jenkins project shows up at SCALE10x&lt;/a&gt; we will &lt;em&gt;also&lt;/em&gt; be at &lt;a rel="nofollow" target="_blank" href="http://www.fosdem.org"&gt;FOSDEM 2012&lt;/a&gt; in &lt;a rel="nofollow" target="_blank" href="http://fosdem.org/transportation"&gt;Brussels&lt;/a&gt; on February 4th and 5th.&lt;/p&gt;

&lt;p&gt;If you can make it to Brussels, you definitely should come to FOSDEM. It's one of the largest meetings of open source developers and users on the planet! It's a tremendous opportunity to meet other people in the open source community but also a great learning experience, with over &lt;a rel="nofollow" target="_blank" href="http://fosdem.org/2012/schedule/main-tracks"&gt;25 main tracks&lt;/a&gt; and &lt;a rel="nofollow" target="_blank" href="http://fosdem.org/2012/schedule/devrooms"&gt;plenty of devrooms&lt;/a&gt; each hosting their own talks, demos and hackathons. The event is also free!&lt;/p&gt;

&lt;p&gt;This year Jenkins will host a stand (table) in the exhibit hall where we will have Jenkins stickers, flyers and maybe even some t-shirts! In addition to the stand, &lt;a rel="nofollow" target="_blank" href="https://github.com/rtyler"&gt;R Tyler Croy&lt;/a&gt; will be &lt;a rel="nofollow" target="_blank" href="http://unethicalblogger.com/2011/12/20/speaking-at-fosdem.html"&gt;speaking in the Configuration and Systems Management dev room&lt;/a&gt; on the subject of "&lt;em&gt;Open Source Infrastructure - Running the Jenkins project with Puppet and more.&lt;/em&gt;"&lt;/p&gt;

&lt;p&gt;If you're interested in joining in, there's some organizational material on &lt;strong&gt;&lt;a rel="nofollow" target="_blank" href="https://wiki.jenkins-ci.org/display/JENKINS/FOSDEM"&gt;the FOSDEM page on the wiki&lt;/a&gt;&lt;/strong&gt;, with some planning/discussion happening on &lt;a rel="nofollow" target="_blank" href="http://lists.jenkins-ci.org/mailman/listinfo/jenkins-fosdem"&gt;this mailing list&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I hope to see you there!&lt;/p&gt;


&lt;div class="field field-type-datetime field-field-eventdatetime"&gt;
      &lt;div class="field-label"&gt;Event Date/Time:&amp;nbsp;&lt;/div&gt;
    &lt;div class="field-items"&gt;
            &lt;div class="field-item odd"&gt;
                    &lt;span class="date-display-single"&gt;Sat, 2012-02-04 12:00&lt;/span&gt;        &lt;/div&gt;
        &lt;/div&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ContinuousBlog/~4/QVRpksYLGrE" height="1" width="1"/&gt;</description>
         <guid isPermaLink="false">369 at http://jenkins-ci.org</guid>
         <pubDate>Sun, 15 Jan 2012 22:31:12 +0000</pubDate>
      </item>
      <item>
         <title>"Thank you" page for Windows/OS X installers</title>
         <link>http://feedproxy.google.com/~r/ContinuousBlog/~3/UsZUZ6Uo2Kc/thank-you-page-windowsos-x-installers</link>
         <description>&lt;p&gt;I've tweaked the website so that downloading the Windows and Mac installers will navigate the browser to "thank you/what's next" page. These pages have links to Wiki that educate the users on where/how the installer will run Jenkins.&lt;/p&gt;

&lt;p&gt;Hopefully this makes it little easier for new users to get started on Jenkins. I've tested the new mechanism with IE, Safari, and Firefox, but if you notice a problem, please let us know.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ContinuousBlog/~4/UsZUZ6Uo2Kc" height="1" width="1"/&gt;</description>
         <guid isPermaLink="false">368 at http://jenkins-ci.org</guid>
         <pubDate>Thu, 05 Jan 2012 17:00:00 +0000</pubDate>
      </item>
      <item>
         <title>Building Jenkins plugins with Gradle</title>
         <link>http://feedproxy.google.com/~r/ContinuousBlog/~3/Im2FehXjgPI/building-jenkins-plugins-gradle</link>
         <description>&lt;p&gt;&lt;img align="right" width="170"/&gt;&lt;/p&gt;

&lt;p&gt;Until now, Jenkins plugins written in Java or Groovy could only be built with Maven, using the maven-hpi-plugin to generate a proper manifest and archive which Jenkins can consume. But starting now, you can also use &lt;a rel="nofollow" target="_blank" href="http://gradle.org"&gt;Gradle&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;See &lt;a rel="nofollow" target="_blank" href="https://wiki.jenkins-ci.org/display/JENKINS/Gradle+JPI+Plugin"&gt;the wiki&lt;/a&gt; for information on how you can use Gradle and the new gradle-jpi-plugin to build, test and release your Java or Groovy Jenkins plugin.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ContinuousBlog/~4/Im2FehXjgPI" height="1" width="1"/&gt;</description>
         <guid isPermaLink="false">363 at http://jenkins-ci.org</guid>
         <pubDate>Wed, 04 Jan 2012 15:00:00 +0000</pubDate>
      </item>
      <item>
         <title>Adding diagrams to Wiki</title>
         <link>http://feedproxy.google.com/~r/ContinuousBlog/~3/QYeO7mmnbG0/adding-diagrams-wiki</link>
         <description>&lt;div style="float:right;margin:1em;"&gt;&lt;img src="http://jenkins-ci.org/sites/default/files/gliffy.png"&gt;&lt;/div&gt;

&lt;p&gt;Thanks to &lt;a rel="nofollow" target="_blank" href="http://www.gliffy.com/"&gt;the kindness from Gliffy&lt;/a&gt;, we can now add diagrams to &lt;a rel="nofollow" target="_blank" href="http://wiki.jenkins-ci.org/"&gt;Wiki pages&lt;/a&gt;, in a way that enables collaborative edits.&lt;/p&gt;

&lt;p&gt;See more info, including a sample diagram in &lt;a rel="nofollow" target="_blank" href="https://wiki.jenkins-ci.org/display/JENKINS/Adding+diagrams"&gt;a Wiki page&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ContinuousBlog/~4/QYeO7mmnbG0" height="1" width="1"/&gt;</description>
         <guid isPermaLink="false">364 at http://jenkins-ci.org</guid>
         <pubDate>Wed, 28 Dec 2011 23:55:34 +0000</pubDate>
      </item>
      <item>
         <title>Jenkins survey result and what UI improvement would you like?</title>
         <link>http://feedproxy.google.com/~r/ContinuousBlog/~3/pkLBIcN9ewY/jenkins-survey-result-and-what-ui-improvement-would-you</link>
         <description>&lt;div style="float:right;margin:1em;"&gt;&lt;a rel="nofollow" target="_blank" href="http://en.wiktionary.org/wiki/too_many_cooks_spoil_the_broth"&gt;
&lt;img width="160" height="160" src="http://livinghealthy.typepad.com/photos/uncategorized/2007/07/11/toomanycooksblog.jpg"&gt;
&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://blog.cloudbees.com/2011/12/jenkins-community-survey-results-82.html"&gt;Jenkins community survey result is in&lt;/a&gt;, which shows a number of interesting stats for us developers, such as 82% of people saying their Jenkins is mission critical, or the spread of distributed builds, especially compared to &lt;a rel="nofollow" target="_blank" href="http://weblogs.java.net/blog/kohsuke/archive/2009/01/hudson_usage_an.html"&gt;my earlier similar usage analytics&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;But just as interesting is the free-form answers to questions like "If there was anything you could you change about Jenkins CI, what would it be?", and while the answer is colorful, there are a few common themes that one can easily spot.&lt;/p&gt;

&lt;p&gt;One of them is "nothing!", which made me feel good, but another is "UI improvement." And incidentally, Domi has started &lt;a rel="nofollow" target="_blank" href="http://jenkins.361315.n4.nabble.com/Jenkins-UI-enhancements-td4196887.html"&gt;a thread in the Jenkins-users list&lt;/a&gt; about this exact topic a week ago.&lt;/p&gt;

&lt;p&gt;The idea is to brainstorm what kind of concrete improvements people would like to see, then run them through some real user experience designers and decide which ones are good ideas and which ones are not.&lt;/p&gt;

&lt;p&gt;I find this thread useful &amp;mdash; so much so that one of those ideas (always show the "Save" button at the bottom in the config page) is already implemented toward the next release of Jenkins. So if you have some thoughts to share, please chime in on that thread.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ContinuousBlog/~4/pkLBIcN9ewY" height="1" width="1"/&gt;</description>
         <guid isPermaLink="false">362 at http://jenkins-ci.org</guid>
         <pubDate>Fri, 23 Dec 2011 19:33:10 +0000</pubDate>
      </item>
      <item>
         <title>Thanks for the support PagerDuty!</title>
         <link>http://feedproxy.google.com/~r/ContinuousBlog/~3/QWus3YCb0y8/thanks-support-pagerduty</link>
         <description>&lt;p&gt;Over drinks this evening &lt;a rel="nofollow" target="_blank" href="https://twitter.com/kohsukekawa"&gt;Kohsuke&lt;/a&gt; pointed out that he never saw a blog post about &lt;a rel="nofollow" target="_blank" href="http://www.pagerduty.com"&gt;PagerDuty&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;center&gt;&lt;a rel="nofollow" target="_blank" href="http://www.pagerduty.com"&gt;&lt;img src="http://agentdero.cachefly.net/continuousblog/images/pagerduty_logo.png" width="360" alt="pagerduty.com"/&gt;&lt;/a&gt;&lt;/center&gt;&lt;/p&gt;

&lt;p&gt;If you've never worked in a sysadmin role or in any other position that would require an on-call rotation, then you may have never seen PagerDuty.&lt;/p&gt;

&lt;p&gt;In essence the service provides a great series of integration points with Pingdom or Nagios for handling monitoring. As an infrastructure guy (part time), I can honestly say it's a great tool and I'm grateful to PagerDuty for supporting Jenkins with our own account to help manage project infrastructure.&lt;/p&gt;

&lt;p&gt;A couple weekends ago I finished setting up &lt;a rel="nofollow" target="_blank" href="http://nagios.jenkins-ci.org/nagios3/"&gt;Nagios&lt;/a&gt; (read-only username/password: &lt;code&gt;jenkins&lt;/code&gt;/&lt;code&gt;jenkins&lt;/code&gt;) for critical project services which by itself is a good step forward. Combine that with PagerDuty's Nagios integration and a solid on-call rotation, and I'm more confident than I've ever been that Kohsuke or myself could actually take a vacation!&lt;/p&gt;

&lt;p&gt;Check them out, and be sure to thank them on Twitter at &lt;a rel="nofollow" target="_blank" href="https://twitter.com/pagerduty"&gt;@PagerDuty&lt;/a&gt; for supporting Jenkins!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ContinuousBlog/~4/QWus3YCb0y8" height="1" width="1"/&gt;</description>
         <guid isPermaLink="false">361 at http://jenkins-ci.org</guid>
         <pubDate>Wed, 21 Dec 2011 05:34:27 +0000</pubDate>
      </item>
      <item>
         <title>Fundraising drive update: thank you everyone!</title>
         <link>http://feedproxy.google.com/~r/ContinuousBlog/~3/qX8kSCOxEVY/fundraising-drive-update-thank-you-everyone</link>
         <description>&lt;div style="float:right;margin:1em;"&gt;&lt;a rel="nofollow" target="_blank" href="http://www.flickr.com/photos/colinzhu/321306018/"&gt;
&lt;img src="http://jenkins-ci.org/sites/default/files/gift.png"&gt;
&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;Our &lt;a rel="nofollow"&gt;earlier appeal&lt;/a&gt; for donation was a drastic boost to &lt;a rel="nofollow" target="_blank" href="https://wiki.jenkins-ci.org/display/JENKINS/Donation"&gt;our fund-raising drive&lt;/a&gt;, (and looking at the twitter reactions, it feels like the Wikipedia parody we put on &lt;a rel="nofollow" target="_blank" href="http://ci.jenkins-ci.org/"&gt;Jenkins on Jenkins&lt;/a&gt; helped spread the words &amp;mdash; I guess jokes do work!&lt;/p&gt;

&lt;p&gt;And I'm happy to report that we've successfully raised over $12000 as of today. That's more than enough to pay off all the current balance and it should keep the project going for quite a while. I've assembled &lt;a rel="nofollow" target="_blank" href="https://wiki.jenkins-ci.org/display/JENKINS/Donors"&gt;the donor list&lt;/a&gt; in appreciation.&lt;/p&gt;

&lt;p&gt;So once again, thanks everyone for their generous support!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ContinuousBlog/~4/qX8kSCOxEVY" height="1" width="1"/&gt;</description>
         <guid isPermaLink="false">360 at http://jenkins-ci.org</guid>
         <pubDate>Mon, 19 Dec 2011 18:30:10 +0000</pubDate>
      </item>
      <item>
         <title>Jenkins at SCALE 10x in Los Angeles</title>
         <link>http://feedproxy.google.com/~r/ContinuousBlog/~3/LxMmv1OEtNE/jenkins-scale-10x-los-angeles</link>
         <description>&lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://www.socallinuxexpo.org/scale10x/jenkins-ci"&gt;&lt;img src="http://agentdero.cachefly.net/unethicalblogger.com/images/scale10x_cloud_85h.png" alt="SCALE10x" align="right"/&gt;&lt;/a&gt;
Consider yourself cordially invited to join the Jenkins project at the &lt;a rel="nofollow" target="_blank" href="http://www.socallinuxexpo.org/scale10x"&gt;Southern California Linux Expo&lt;/a&gt; this January 20th through the 22nd in Los Angeles, CA.&lt;/p&gt;

&lt;p&gt;For those who aren't familiar with the expo, often referred to as "SCALE", here's what &lt;a rel="nofollow" target="_blank" href="https://en.wikipedia.org/wiki/Southern_California_Linux_Expo"&gt;Wikipedia&lt;/a&gt; has to say:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;The Southern California Linux Expo (SCALE) is an annual Linux, Open-Source, and Free Software conference held in Los Angeles, CA.&lt;/p&gt;
  
  &lt;p&gt;SCALE is one of five community run Open-source software events in the United States, as of Spring 2011. SCALE has been held annually since 2002, and is a volunteer-run event. The event features an expo floor with both commercial and .org / non-profit exhibitors, as well as 3 days of seminars on the topic of Linux and Open Source software.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This year, we have been invited to exhibit on the expo floor where we intend on introducing our fellow hackers and non-hackers alike to the joys of continuous integration with Jenkins! &lt;a rel="nofollow" target="_blank" href="https://twitter.com/kohsukekawa"&gt;Kohsuke&lt;/a&gt; and myself will be there demonstrating Jenkins and handing out stickers.&lt;/p&gt;

&lt;p&gt;If you're interested in helping with the Jenkins booth, please &lt;strong&gt;&lt;a rel="nofollow" target="_blank" href="http://lists.jenkins-ci.org/mailman/listinfo/jenkins-scale"&gt;join this mailing list&lt;/a&gt;&lt;/strong&gt; so we can get things coordinated! If you don't have time to help us man the booth, but will be coming to SCALE anyways (we highly recommend it), stop by and say "hello!"&lt;/p&gt;

&lt;p&gt;Just as we did for JavaOne &lt;a rel="nofollow" target="_blank" href="https://jenkins-ci.org/content/ci-dinner-wednesday-630"&gt;this year&lt;/a&gt;, we will also likely host a "CI Dinner" in Los Angeles before the Expo. The details of which will likely be hammered out closer to the event, and likely coordinated on &lt;a rel="nofollow" target="_blank" href="http://lists.jenkins-ci.org/mailman/listinfo/jenkins-scale"&gt;the mailing list&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Hope to see you in LA!
&lt;/p&gt;
&lt;div class="field field-type-datetime field-field-eventdatetime"&gt;
      &lt;div class="field-label"&gt;Event Date/Time:&amp;nbsp;&lt;/div&gt;
    &lt;div class="field-items"&gt;
            &lt;div class="field-item odd"&gt;
                    &lt;span class="date-display-single"&gt;Fri, 2012-01-20 15:00&lt;/span&gt;        &lt;/div&gt;
        &lt;/div&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ContinuousBlog/~4/LxMmv1OEtNE" height="1" width="1"/&gt;</description>
         <guid isPermaLink="false">359 at http://jenkins-ci.org</guid>
         <pubDate>Mon, 12 Dec 2011 06:04:41 +0000</pubDate>
      </item>
      <item>
         <title>Jenkins User Group: JenkinsMobi presentation available in SlideShare</title>
         <link>http://hudsonmobi.wordpress.com/2011/10/05/jenkins-user-group-jenkinsmobi-presentation-available-in-slideshare/</link>
         <description>JenkinsMobi: Jenkins XML API for Mobile Applications View more presentations from Luca Milanesio&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hudsonmobi.wordpress.com&amp;amp;blog=12790565&amp;amp;post=207&amp;amp;subd=hudsonmobi&amp;amp;ref=&amp;amp;feed=1" width="1" height="1"/&gt;</description>
         <guid isPermaLink="false">http://hudsonmobi.wordpress.com/?p=207</guid>
         <pubDate>Wed, 05 Oct 2011 07:16:10 +0000</pubDate>
         <content:encoded><![CDATA[<div style="width:425px;" id="__ss_9506088"><strong><a rel="nofollow" target="_blank" href="http://www.slideshare.net/lucamilanesio/jenkinsmobi-jenkins-xml-api-for-mobile-applications" title="JenkinsMobi: Jenkins XML API for Mobile Applications">JenkinsMobi: Jenkins XML API for Mobile Applications</a></strong> 
<div style="padding:5px 0 12px;"> View more <a rel="nofollow" target="_blank" href="http://www.slideshare.net/">presentations</a> from <a rel="nofollow" target="_blank" href="http://www.slideshare.net/lucamilanesio">Luca Milanesio</a> </div>
</div>
<br />  <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gocomments/hudsonmobi.wordpress.com/207/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hudsonmobi.wordpress.com/207/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godelicious/hudsonmobi.wordpress.com/207/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hudsonmobi.wordpress.com/207/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gofacebook/hudsonmobi.wordpress.com/207/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hudsonmobi.wordpress.com/207/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gotwitter/hudsonmobi.wordpress.com/207/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hudsonmobi.wordpress.com/207/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gostumble/hudsonmobi.wordpress.com/207/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hudsonmobi.wordpress.com/207/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godigg/hudsonmobi.wordpress.com/207/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hudsonmobi.wordpress.com/207/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/goreddit/hudsonmobi.wordpress.com/207/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hudsonmobi.wordpress.com/207/"/></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hudsonmobi.wordpress.com&amp;blog=12790565&amp;post=207&amp;subd=hudsonmobi&amp;ref=&amp;feed=1" width="1" height="1"/>]]></content:encoded>
         <media:content medium="image" url="http://1.gravatar.com/avatar/7beef3a3c76d83b955c22d1aadd99aa9?s=96&amp;amp;d=identicon&amp;amp;r=G">
            <media:title type="html">hudsonmobi</media:title>
         </media:content>
      </item>
      <item>
         <title>JenkinsMobi is live on Android Market</title>
         <link>http://hudsonmobi.wordpress.com/2011/10/02/jenkinsmobi-is-live-on-android-market/</link>
         <description>JenkinsMobi 3.0 is now available for download from Android Market ! Discover the new features and see how we develop it with live demo examples at #jenkinsconf in San Francisco. If you like it OR you want more and something different, feel free to leave your comment in the Android Market user reviews. Come to the [...]&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hudsonmobi.wordpress.com&amp;amp;blog=12790565&amp;amp;post=203&amp;amp;subd=hudsonmobi&amp;amp;ref=&amp;amp;feed=1" width="1" height="1"/&gt;</description>
         <guid isPermaLink="false">http://hudsonmobi.wordpress.com/?p=203</guid>
         <pubDate>Sun, 02 Oct 2011 12:31:50 +0000</pubDate>
         <content:encoded><![CDATA[<p><a rel="nofollow" target="_blank" href="https://market.android.com/details?id=com.lmit.jenkins.android.activity"><img class="alignleft size-full wp-image-205" title="JenkinsMobi on Android" src="http://hudsonmobi.files.wordpress.com/2011/10/jenkinsmobi-androidmarket1.png?w=600" alt=""/></a><span style="color:#000000;"><strong>JenkinsMobi 3.0 is now available for <span style="color:#000000;"><a rel="nofollow" title="JenkinsMobi for Android" target="_blank" href="https://market.android.com/details?id=com.lmit.jenkins.android.activity">download from <span style="color:#99cc00;">Android</span> <span style="color:#808080;">Market</span></a> !</span></strong></span></p>
<p>Discover the new features and see how we develop it with live demo examples at #jenkinsconf in San Francisco.</p>
<p>If you like it OR you want more and something different, feel free to leave your comment in the Android Market user reviews.</p>
<p>Come to the<a rel="nofollow" title="Jenkins User Conference" target="_blank" href="http://www.cloudbees.com/jenkins-user-conference-2011.cb"> Jenkins User Conference </a>and meet <a rel="nofollow" title="JenkinsMobi Development Team" target="_blank" href="http://www.jenkins-ci.mobi/#about">Jenkins Mobi Development Team</a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<br />  <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gocomments/hudsonmobi.wordpress.com/203/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hudsonmobi.wordpress.com/203/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godelicious/hudsonmobi.wordpress.com/203/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hudsonmobi.wordpress.com/203/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gofacebook/hudsonmobi.wordpress.com/203/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hudsonmobi.wordpress.com/203/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gotwitter/hudsonmobi.wordpress.com/203/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hudsonmobi.wordpress.com/203/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gostumble/hudsonmobi.wordpress.com/203/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hudsonmobi.wordpress.com/203/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godigg/hudsonmobi.wordpress.com/203/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hudsonmobi.wordpress.com/203/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/goreddit/hudsonmobi.wordpress.com/203/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hudsonmobi.wordpress.com/203/"/></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hudsonmobi.wordpress.com&amp;blog=12790565&amp;post=203&amp;subd=hudsonmobi&amp;ref=&amp;feed=1" width="1" height="1"/>]]></content:encoded>
         <media:content medium="image" url="http://1.gravatar.com/avatar/7beef3a3c76d83b955c22d1aadd99aa9?s=96&amp;amp;d=identicon&amp;amp;r=G">
            <media:title type="html">hudsonmobi</media:title>
         </media:content>
         <media:content medium="image" url="http://hudsonmobi.files.wordpress.com/2011/10/jenkinsmobi-androidmarket1.png">
            <media:title type="html">JenkinsMobi on Android</media:title>
         </media:content>
      </item>
      <item>
         <title>JenkinsMobi is coming tomorrow at Jenkins User Conference</title>
         <link>http://hudsonmobi.wordpress.com/2011/10/01/jenkinsmobi-is-coming-tomorrow-at-jenkins-user-conference/</link>
         <description>Jenkins Mobi 3.0 has been published to the AppStore and everything is ready to go ! Don&amp;#8217;t miss the first Jenkins User Conference #jenkinsconf tomorrow ! In the meantime you can download JenkinsMobi for iPhone and enjoy the new features and User Interface. JenkinsMobi for Android will be published and revealed tomorrow morning in San Francisco. Luca [...]&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hudsonmobi.wordpress.com&amp;amp;blog=12790565&amp;amp;post=194&amp;amp;subd=hudsonmobi&amp;amp;ref=&amp;amp;feed=1" width="1" height="1"/&gt;</description>
         <guid isPermaLink="false">http://hudsonmobi.wordpress.com/?p=194</guid>
         <pubDate>Sat, 01 Oct 2011 11:34:35 +0000</pubDate>
         <content:encoded><![CDATA[<p><strong>Jenkins Mobi 3.0 has been <a rel="nofollow" title="JenkinsMobi per iPhone" target="_blank" href="http://itunes.apple.com/gb/app/jenkinsmobi/id467020180">published to the AppStore</a> and everything is ready to go !</strong></p>
<p><a rel="nofollow" target="_blank" href="http://hudsonmobi.files.wordpress.com/2011/09/jenkins-user-conf-large-1-final.png"><img class="alignright size-full wp-image-199" title="Jenkins User Conference" src="http://hudsonmobi.files.wordpress.com/2011/09/jenkins-user-conf-large-1-final.png?w=600" alt="Jenkins User Conference"/></a>Don&#8217;t miss the first <a rel="nofollow" title="Jenkins User Conference" target="_blank" href="http://www.cloudbees.com/jenkins-user-conference-2011.cb">Jenkins User Conference</a> #jenkinsconf tomorrow !</p>
<p>In the meantime you can download JenkinsMobi for iPhone and enjoy the new features and User Interface.</p>
<p><strong>JenkinsMobi for Android</strong> will be <span style="color:#0000ff;"><strong>published and revealed tomorrow morning</strong></span> in San Francisco.</p>
<p><em>Luca and JenkinsMobi Development Team.</em></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<br />  <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gocomments/hudsonmobi.wordpress.com/194/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hudsonmobi.wordpress.com/194/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godelicious/hudsonmobi.wordpress.com/194/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hudsonmobi.wordpress.com/194/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gofacebook/hudsonmobi.wordpress.com/194/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hudsonmobi.wordpress.com/194/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gotwitter/hudsonmobi.wordpress.com/194/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hudsonmobi.wordpress.com/194/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gostumble/hudsonmobi.wordpress.com/194/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hudsonmobi.wordpress.com/194/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godigg/hudsonmobi.wordpress.com/194/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hudsonmobi.wordpress.com/194/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/goreddit/hudsonmobi.wordpress.com/194/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hudsonmobi.wordpress.com/194/"/></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hudsonmobi.wordpress.com&amp;blog=12790565&amp;post=194&amp;subd=hudsonmobi&amp;ref=&amp;feed=1" width="1" height="1"/>]]></content:encoded>
         <media:content medium="image" url="http://1.gravatar.com/avatar/7beef3a3c76d83b955c22d1aadd99aa9?s=96&amp;amp;d=identicon&amp;amp;r=G">
            <media:title type="html">hudsonmobi</media:title>
         </media:content>
         <media:content medium="image" url="http://hudsonmobi.files.wordpress.com/2011/09/jenkins-user-conf-large-1-final.png">
            <media:title type="html">Jenkins User Conference</media:title>
         </media:content>
      </item>
      <item>
         <title>JenkinsMobi 3.0 rocks on iPhone</title>
         <link>http://hudsonmobi.wordpress.com/2011/09/26/jenkinsmobi-3-0-rocks-on-iphone/</link>
         <description>&amp;#160; &amp;#160; Explore JenkinsMobi 3.0 on our new web site: http://jenkins-ci.mobi. It will be launched at the Jenkins User Conference in San Francisco and available for download from October 2nd&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hudsonmobi.wordpress.com&amp;amp;blog=12790565&amp;amp;post=188&amp;amp;subd=hudsonmobi&amp;amp;ref=&amp;amp;feed=1" width="1" height="1"/&gt;</description>
         <guid isPermaLink="false">http://hudsonmobi.wordpress.com/?p=188</guid>
         <pubDate>Sun, 25 Sep 2011 23:14:40 +0000</pubDate>
         <content:encoded><![CDATA[<div class='embed-vimeo' style='text-align:center;'></div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span style="color:#0000ff;"><strong>Explore JenkinsMobi 3.0 on our new web site: <a rel="nofollow" title="JenkinsMobi Home Page" target="_blank" href="http://jenkins-ci.mobi">http://jenkins-ci.mobi</a>.</strong></span></p>
<p>It will be launched at the <a rel="nofollow" title="Jenkins User Conference" target="_blank" href="http://www.cloudbees.com/jenkins-user-conference-2011.cb">Jenkins User Conference in San Francisco</a> and available for download from <span style="text-decoration:underline;"><span style="color:#ff0000;text-decoration:underline;"><strong>October 2nd</strong></span></span></p>
<br />  <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gocomments/hudsonmobi.wordpress.com/188/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hudsonmobi.wordpress.com/188/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godelicious/hudsonmobi.wordpress.com/188/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hudsonmobi.wordpress.com/188/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gofacebook/hudsonmobi.wordpress.com/188/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hudsonmobi.wordpress.com/188/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gotwitter/hudsonmobi.wordpress.com/188/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hudsonmobi.wordpress.com/188/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gostumble/hudsonmobi.wordpress.com/188/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hudsonmobi.wordpress.com/188/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godigg/hudsonmobi.wordpress.com/188/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hudsonmobi.wordpress.com/188/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/goreddit/hudsonmobi.wordpress.com/188/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hudsonmobi.wordpress.com/188/"/></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hudsonmobi.wordpress.com&amp;blog=12790565&amp;post=188&amp;subd=hudsonmobi&amp;ref=&amp;feed=1" width="1" height="1"/>]]></content:encoded>
         <media:content medium="image" url="http://1.gravatar.com/avatar/7beef3a3c76d83b955c22d1aadd99aa9?s=96&amp;amp;d=identicon&amp;amp;r=G">
            <media:title type="html">hudsonmobi</media:title>
         </media:content>
      </item>
      <item>
         <title>JenkinsMobi secrets are coming to JUC 2011</title>
         <link>http://hudsonmobi.wordpress.com/2011/09/21/jenkinsmobi-secrets-are-coming-to-juc-2011/</link>
         <description>JenkinsMobi secrets will be revealed at the JUC 2011 in SFO ! We are proud to announce that JenkinsMobi will participate to the World&amp;#8217;s First Jenkins User Conference in San Francisco (see http://www.cloudbees.com/jenkins-user-conference-2011-abstracts.cb#SimoneArdissone). We will share our expertise with you in creating Jenkins Mobi on iOS and Android and how to use the power of Jenkins [...]&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hudsonmobi.wordpress.com&amp;amp;blog=12790565&amp;amp;post=182&amp;amp;subd=hudsonmobi&amp;amp;ref=&amp;amp;feed=1" width="1" height="1"/&gt;</description>
         <guid isPermaLink="false">http://hudsonmobi.wordpress.com/?p=182</guid>
         <pubDate>Wed, 21 Sep 2011 17:07:39 +0000</pubDate>
         <content:encoded><![CDATA[<p><a rel="nofollow" target="_blank" href="http://hudsonmobi.files.wordpress.com/2011/09/jenkinsmobi-underreview.png"><img class="alignleft size-full wp-image-184" style="border-color:white;border-width:10px;" title="JenkinsMobi-underReview" src="http://hudsonmobi.files.wordpress.com/2011/09/jenkinsmobi-underreview.png?w=600" alt=""/></a><span style="color:#0000ff;"><strong>JenkinsMobi secrets will be revealed at the JUC 2011 in SFO !</strong></span></p>
<p>We are proud to announce that JenkinsMobi will participate to the <em>World&#8217;s First Jenkins User Conference in San Francisco</em> (see <a rel="nofollow" title="JUC SanFrancisco - JenkinsMobi" target="_blank" href="http://www.cloudbees.com/jenkins-user-conference-2011-abstracts.cb#SimoneArdissone">http://www.cloudbees.com/jenkins-user-conference-2011-abstracts.cb#SimoneArdissone</a>).</p>
<p>We will share our expertise with you in creating Jenkins Mobi on iOS and Android and how to use the power of Jenkins XML API on a Mobile device.</p>
<p><span style="text-decoration:underline;">P.S. Jenkins Mobi for iOS and for Android launch date has been aligned to the JUC dates</span>: <span style="color:#ff0000;"><strong>October 2nd 2011</strong></span>.</p>
<p><strong>Come to JUC in San Francisco</strong> &#8230; and we will be happy to meet you and have your feedback face-to-face <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley'/> </p>
<p style="text-align:right;">JenkinsMobi Development Team &#8211; LMIT Limited.</p>
<br />  <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gocomments/hudsonmobi.wordpress.com/182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hudsonmobi.wordpress.com/182/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godelicious/hudsonmobi.wordpress.com/182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hudsonmobi.wordpress.com/182/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gofacebook/hudsonmobi.wordpress.com/182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hudsonmobi.wordpress.com/182/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gotwitter/hudsonmobi.wordpress.com/182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hudsonmobi.wordpress.com/182/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gostumble/hudsonmobi.wordpress.com/182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hudsonmobi.wordpress.com/182/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godigg/hudsonmobi.wordpress.com/182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hudsonmobi.wordpress.com/182/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/goreddit/hudsonmobi.wordpress.com/182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hudsonmobi.wordpress.com/182/"/></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hudsonmobi.wordpress.com&amp;blog=12790565&amp;post=182&amp;subd=hudsonmobi&amp;ref=&amp;feed=1" width="1" height="1"/>]]></content:encoded>
         <media:content medium="image" url="http://1.gravatar.com/avatar/7beef3a3c76d83b955c22d1aadd99aa9?s=96&amp;amp;d=identicon&amp;amp;r=G">
            <media:title type="html">hudsonmobi</media:title>
         </media:content>
         <media:content medium="image" url="http://hudsonmobi.files.wordpress.com/2011/09/jenkinsmobi-underreview.png">
            <media:title type="html">JenkinsMobi-underReview</media:title>
         </media:content>
      </item>
      <item>
         <title>Jenkins Mobi for iOS and Android is coming</title>
         <link>http://hudsonmobi.wordpress.com/2011/08/10/jenkins-mobi-for-ios-and-android-is-coming/</link>
         <description>JenkinsMobi will come very soon, stay tuned ! Thank you for waiting so long, we have almost completed our new redesigned Mobile client for Jenkins. We have been working very hard in thinking about your needs, your feedback and what we would like to see in Jenkins CI &amp;#8220;on the road&amp;#8221;: after many months of design [...]&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hudsonmobi.wordpress.com&amp;amp;blog=12790565&amp;amp;post=177&amp;amp;subd=hudsonmobi&amp;amp;ref=&amp;amp;feed=1" width="1" height="1"/&gt;</description>
         <guid isPermaLink="false">http://hudsonmobi.wordpress.com/?p=177</guid>
         <pubDate>Wed, 10 Aug 2011 19:59:13 +0000</pubDate>
         <content:encoded><![CDATA[<p><span style="color:#ff0000;"><strong>JenkinsMobi will come very soon, stay tuned !</strong></span></p>
<p><a rel="nofollow" target="_blank" href="http://hudsonmobi.files.wordpress.com/2011/08/jenkinsmobi-homescreen-top1.png"><img class="alignleft size-full wp-image-179" title="JenkinsMobi-homescreen-top" src="http://hudsonmobi.files.wordpress.com/2011/08/jenkinsmobi-homescreen-top1.png?w=600" alt=""/></a>Thank you for <span style="text-decoration:underline;">waiting so long</span>, we have almost completed our <span style="color:#000000;"><strong>new redesigned Mobile client for Jenkins</strong></span>.</p>
<p>We have been <span style="text-decoration:underline;"><strong>working very hard in thinking about your needs</strong></span>, your feedback and what we would like to see in Jenkins CI <em>&#8220;on the road&#8221;</em>: after many months of design and coding, the <strong><span style="color:#0000ff;">new redesigned mobile client is almost ready !!</span></strong></p>
<p>There are <strong>more than 60 new features to discover</strong> and a completely <strong><span style="color:#0000ff;">new redesign UE</span></strong>, more attractive, easy and accessible.</p>
<p>JenkinsMobi will be coming to the AppStore and Android Market in August 2011.</p>
<p>LMIT ltd <em>&#8220;ALM in action&#8221;</em></p>
<br />  <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gocomments/hudsonmobi.wordpress.com/177/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hudsonmobi.wordpress.com/177/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godelicious/hudsonmobi.wordpress.com/177/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hudsonmobi.wordpress.com/177/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gofacebook/hudsonmobi.wordpress.com/177/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hudsonmobi.wordpress.com/177/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gotwitter/hudsonmobi.wordpress.com/177/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hudsonmobi.wordpress.com/177/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gostumble/hudsonmobi.wordpress.com/177/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hudsonmobi.wordpress.com/177/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godigg/hudsonmobi.wordpress.com/177/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hudsonmobi.wordpress.com/177/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/goreddit/hudsonmobi.wordpress.com/177/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hudsonmobi.wordpress.com/177/"/></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hudsonmobi.wordpress.com&amp;blog=12790565&amp;post=177&amp;subd=hudsonmobi&amp;ref=&amp;feed=1" width="1" height="1"/>]]></content:encoded>
         <media:content medium="image" url="http://1.gravatar.com/avatar/7beef3a3c76d83b955c22d1aadd99aa9?s=96&amp;amp;d=identicon&amp;amp;r=G">
            <media:title type="html">hudsonmobi</media:title>
         </media:content>
         <media:content medium="image" url="http://hudsonmobi.files.wordpress.com/2011/08/jenkinsmobi-homescreen-top1.png">
            <media:title type="html">JenkinsMobi-homescreen-top</media:title>
         </media:content>
      </item>
      <item>
         <title>Open Source: the Meritocracy vs the Circle of Trust</title>
         <link>http://javaadventure.blogspot.com/2011/08/open-source-meritocracy-vs-circle-of.html</link>
         <description>There has been this idea running around the back of my head for a while, and it's only now that it is starting to crystalize into something that I can express.&lt;br /&gt;When we look at Open Source projects, we see that there is a hierarchy of involvement. There are different levels at which you can be involved, and at each higher level, there will be less and less individuals. For now I am going to divide involvement up like this:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Interested: this group of individuals know that the project exists, and might even be following what it is doing, but have not been able to actually use the project at all yet (for whatever reason)&lt;/li&gt;&lt;li&gt;Consumers: these are the people who actually use the project. They may not even be following the project, e.g. a lot of people consume log4j or ANT without following the mailing lists, seeing what features are on the roadmap, or even filing issues.&lt;/li&gt;&lt;li&gt;Contributors: if you are filing issues, submitting patches, etc, but you do not have commit access to the project, then you are a Contributor.&lt;/li&gt;&lt;li&gt;Committers: you have commit access to the project&lt;/li&gt;&lt;li&gt;Management: you get to have a say in some of the following: whether the new release of a project can be released; the architecture/direction of the project going forward; who has commit access; etc.&lt;/li&gt;&lt;/ul&gt;Different Open Source projects but different barriers at different points. For example:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Contributor road-blocks:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;You may have to create an account to file issues. [Technical]&lt;/li&gt;&lt;li&gt;You may have to sign a CLA and fax it off before you can commit any patches. [Legal]&lt;/li&gt;&lt;li&gt;You may have to get a&amp;nbsp;notarized signed CLA sent via snail-mail before you can commit any patches. [Legal]&lt;/li&gt;&lt;li&gt;You may have to get your employer to sign-off on you contributing patches. [Legal]&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Committer road-blocks:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;You may have to be invited to become a committer.&lt;/li&gt;&lt;li&gt;You may have to establish merit before you can be invited to become a committer.&lt;/li&gt;&lt;li&gt;You may have&amp;nbsp;to sign a CLA and fax it off before you can get commit access. [Legal]&lt;/li&gt;&lt;li&gt;&lt;/li&gt;&lt;li&gt;You may have to get a&amp;nbsp;notarized signed CLA sent via snail-mail before you can get commit access. [Legal]&lt;/li&gt;&lt;li&gt;You may have to get your employer to sign-off on you committing code to the project. [Legal]&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Management road-blocks:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;You may have to be invited to become management.&lt;/li&gt;&lt;li&gt;You may have to establish merit before you can be invited to become management.&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;(Note: I'm not going to even try and pretend that the above is a complete list of road-blocks)&lt;br /&gt;&lt;div&gt;Different people view success of Open Source projects differently. Some measures of success include: the number of consumers; &amp;nbsp;the number of active contributors; the number of committers; the number of releases; the number of downloads; the number of issues raised and closed; the activity of mailing lists.&lt;/div&gt;&lt;div&gt;None of these are correct, and much like psychologists&amp;nbsp;hypothesize a (in reality) unmeasurable&amp;nbsp;&lt;a rel="nofollow" target="_blank" href="http://en.wikipedia.org/wiki/G_factor_(psychometrics)"&gt;“g factor”&lt;/a&gt; as a true measure of intelligence against which all real measures (such as IQ) are only partial measures. We could hypothesize an unmeasurable “s factor” which is the true measure of the success of an Open Source project.&lt;/div&gt;&lt;div&gt;But I don't want to go down such an academic road today. Instead lets look at the dependency tree in the measures of success that we know of...&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Number of downloads depends on number of consumers: as a consumer has to download your project at least once... it is not a perfect dependency, because you could download each release of the project once and every time decide it is a load of rubbish and never actually consume it... and a consumer may have just downloaded version 1.0 once and stayed on that version for ever more, but in general, if you have a large number of consumers, you will have a large number of downloads and the opposite does not necessarily follow.&lt;/li&gt;&lt;li&gt;Activity of mailing lists depends on the number of active contributors: when you have a lot of active contributors, the mailing lists will be active... however the mailing lists can be active without any active contributors.&lt;/li&gt;&lt;li&gt;Number of issues raised depends on the number of active contributors: for similar reasons to the previous.&lt;/li&gt;&lt;li&gt;Number of issues closed depends on the number of committers: because you need commit access to close most issues (appart from the "not a bug" type of issues)&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;So a lot of the measures of success can be raised by increasing the number of consumers, active contributors, and committers. However, just because we have a large number of consumers/active contributors/committers does not imply that we have a successful project, it just says that projects that&amp;nbsp;have a large number of consumers/active contributors/committers have a greater&amp;nbsp;likelihood of being successful projects.&lt;/div&gt;&lt;div&gt;So how do we increase that number, and thereby increase the probability that our Open Source project is a “success”?&lt;/div&gt;&lt;div&gt;Well, if you are picking an project to use, i.e. deciding to become a consumer, one of the things you will look at is how active the community is (i.e. number of active&amp;nbsp;contributors&amp;nbsp;and number of committers). It's not the only thing you will look at, but assuming you have two projects which have the feature-set you need, and they are comparable in usability, etc. When you come to make the decision, the social beast in you will pick the larger active community (who wants to pick the dead project).&amp;nbsp;The active community also act as evangelists out selling the project to potential consumers. So one way to grow the number of consumers is to grow the active community.&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Number of consumers (partially) depends on the number of active contributors&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;If we have lots of active contributors and very few committers, very soon there will be a glut of patches that don't get applied, and the active contributors will wonder off to another project where there contributions can be consumed. So for each project, there is probably some upper limit to the number of active contributors that depends on the number of committers. That limit depends on things like the complexity of the project, the code base, the toolchain used by the project, the project management processes, etc. So I don't think there is any hard and fast rule like you can have X active contributors for every Y committers on any open source project.&lt;/div&gt;&lt;div&gt;But what I do think we can say is:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Number of active contributors is limited by the number of committers.&lt;/li&gt;&lt;/ul&gt;So at this point you might feel that my chain of logic looks a little like this:&lt;/div&gt;&lt;div&gt;&lt;div class="separator" style="clear:both;text-align:center;"&gt;&lt;a rel="nofollow" target="_blank" href="http://1.bp.blogspot.com/-H10LaHHYGuI/Tjp4aG25B-I/AAAAAAAAAFQ/uSx2SyoC91M/s1600/2260187416_be564a30a4.jpg" style="margin-left:1em;margin-right:1em;"&gt;&lt;img border="0" height="320" src="http://1.bp.blogspot.com/-H10LaHHYGuI/Tjp4aG25B-I/AAAAAAAAAFQ/uSx2SyoC91M/s320/2260187416_be564a30a4.jpg" width="212"/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear:both;text-align:center;"&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;But I should point out that what I am trying to say is really that:&lt;/div&gt;&lt;div style="text-align:center;"&gt;&lt;i&gt;Having a lot of committers&lt;br /&gt;&amp;nbsp;indicates that a project is more likely to be successful, &lt;br /&gt;but it cannot guarantee that success.&lt;/i&gt;&lt;/div&gt;&lt;div&gt;Hopefully your back thinking I have a solid argument again.&lt;/div&gt;&lt;div&gt;So how do we get a lot of committers? Well the answer is easy, remove as many road-blocks to becoming a committer.&lt;/div&gt;&lt;div&gt;Some of the road-blocks are technical. So you have to create an account to file issues... well we can switch to a issue tracking tool that uses OpenID or oAuth and now you can use an account you already have to file those issues... or perhaps you can just provide your email address and fill in a captcha... etc. None of these completely remove the technical road-block, but they can make it easier for the consumer to graduate to active contributor.&lt;/div&gt;&lt;div&gt;Some of the road-blocks are legal. So you need a CLA signed with the blood of an Armur leopard before you can submit a patch. These are harder to work around, but not always impossible e.g. perhaps small patches (less than some size metric) don't need the CLA.&lt;/div&gt;&lt;div&gt;After all these road-blocks, we start to hit what I like to call the “merit wall”. And this is the problem that I see. In essence you need to establish that you have the merit to work on the project. You need to establish a chain of consistent patches (which get picked up by the existing committers) of good quality before you are invited to become a committer.&amp;nbsp;&lt;/div&gt;&lt;div&gt;That to me is a crazy way to gate commit access.&amp;nbsp;&lt;/div&gt;&lt;div&gt;Just because your submitted patches were all stellar quality, that could just be the result of the areas being patched having good test coverage, so you were forced to get the code right. It could be that the nature of bundling up your changes as a patch forced you to think more about the changes. You could become sloppy as a coder, etc.&lt;/div&gt;&lt;div&gt;There are many reasons why “past performance is not a guarantee of future returns”. Some people think the solution to this is to have merit expire, e.g. if you have not worked on the project recently, then you loose the right to work on the project. All that happens then is that people start doing busy work on the project just before their merit is due to expire, and such busy work is, by its very nature, not the work that drives a project forward.&lt;/div&gt;&lt;div&gt;In my view, the only merit to contribute to a project is the code you are contributing right now. Not the code you contributed yesterday, last month, or last year. Not the code you might contribute tomorrow, next month, or next year. But the code you are contributing right now. You don't have merit, but your code might.&lt;/div&gt;&lt;div&gt;Merit is the wrong thing to use as a gate for commit access.&amp;nbsp;&lt;/div&gt;&lt;div&gt;Because what is giving commit access really about? It is about saying that we trust you to commit changes to the project. If you commit code which has no merit, we (or you) can use the SCM to back out those changes. The merit of your previous submissions is a very poor measure of our trust in you using the SCM. In fact because for a lot of projects, generating patches actually is about not using the SCM at all (Git pull requests changes that) it is exactly the wrong thing to use to establish trust.&lt;/div&gt;&lt;div&gt;Once we realize that commit access is about trust and not merit, then we can really start to build a community, and increase the likelihood of our project being a success:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;You don't start with zero trust.&lt;/li&gt;&lt;li&gt;One big abuse of trust, and you have lost all your trust and you have to work a lot harder to earn what you had back again.&lt;/li&gt;&lt;li&gt;You have to be given scope in order to earn more trust.&lt;/li&gt;&lt;li&gt;Trust does not expire easily.&lt;/li&gt;&lt;/ul&gt;So what I am arguing is that if somebody shows up knocking at the door of your project looking to contribute, at some point you have to trust them enough to open the door and let them in. It's fine if you have a few hurdles that they have to jump, but remember that at the end of the day you are trying to decided if you trust them enough to let them make changes to the code, or to put it another way, if you trust them to make good judgements on the merit of any changes they want to commit.&lt;/div&gt;&lt;div style="text-align:center;"&gt;&lt;i&gt;Your merit as a committer is not the &lt;br /&gt;merit of the code changes you have committed, &lt;br /&gt;but all the code changes you did not commit&amp;nbsp;&lt;/i&gt;&lt;i&gt;because those changes had no merit.&lt;/i&gt;&lt;/div&gt;&lt;div&gt;A good committer is somebody who does not make changes that are bad. The ideal committer only makes commits that improve the project. Joe might be the ideal committer for your project even though he has never submitted a patch because Joe knows when a patch is improving the project and when it is not, but because Joe has never submitted a patch, he has earned no merit in your projects eyes, so he will never become a committer.&lt;/div&gt;&lt;div&gt;Commit access is about letting somebody inside the circle of trust. The easier you make that process, the more vibrant your community, and the more successful your project. Put a merit wall in place and you are alienating your potential community (never mind that it is the wrong barrier in the first place)&lt;/div&gt;&lt;div class="separator" style="clear:both;text-align:center;"&gt;&lt;/div&gt;&lt;div&gt;Look at the &lt;a rel="nofollow" target="_blank" href="http://jenkins-ci.org/"&gt;Jenkins&lt;/a&gt; project. If you want commit access, you just ask for it. How is that for initial trust. The result is a very successful project, oh and the sky has not fallen. Everyone that has been trusted so far has respected the trust they have been shown.&lt;/div&gt;&lt;div&gt;Look at most projects hosted on github. Pull requests have effectively removed a large chunk of the need for commit access, and because you can see the person's skills with the SCM, they can earn trust to be let loose on the canonical source directly.&lt;/div&gt;&lt;div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left:auto;margin-right:auto;text-align:center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align:center;"&gt;&lt;a rel="nofollow" target="_blank" href="http://2.bp.blogspot.com/-QHIt80xqV0k/Tjp449CedNI/AAAAAAAAAFU/Hi0lynTYXpw/s1600/Circle-of-Trust1.jpg" style="margin-left:auto;margin-right:auto;"&gt;&lt;img border="0" height="193" src="http://2.bp.blogspot.com/-QHIt80xqV0k/Tjp449CedNI/AAAAAAAAAFU/Hi0lynTYXpw/s320/Circle-of-Trust1.jpg" width="320"/&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align:center;"&gt;A merit wall can leave you feeling like this&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;So my message to all open source projects that use merit based on previous patches as a measure of the worth of a potential committer, please look again at your policy. Are you sure you are looking for the right qualities to drive your project to bigger successes?&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21580788-1619472904270827101?l=javaadventure.blogspot.com' alt=''/&gt;&lt;/div&gt;</description>
         <author>Stephen Connolly</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-21580788.post-1619472904270827101</guid>
         <pubDate>Thu, 04 Aug 2011 11:38:00 +0000</pubDate>
         <media:thumbnail height="72" url="http://1.bp.blogspot.com/-H10LaHHYGuI/Tjp4aG25B-I/AAAAAAAAAFQ/uSx2SyoC91M/s72-c/2260187416_be564a30a4.jpg" width="72" />
      </item>
      <item>
         <title>Backwards compatibility</title>
         <link>http://javaadventure.blogspot.com/2011/05/backwards-compatibility.html</link>
         <description>This is a tail about Jenkins (née Hudson) and Kohsuke's policy of maintaining backwards compatibility...&lt;br /&gt;&lt;br /&gt;Back in 2006 I started working for my previous employer, just a month or two after Peter Reilly started. Initially we were working on the same team. This was a team who's CI system was a nightly cron job that emailed off a list of failing tests to everyone... obviously Peter and I had many a WTF over that old system... so I convinced our boss that we should put some effort into setting up a proper CI system... Initially this was CruiseControl (as he thought Hudson at version 1.64 was too new and unheard of... go with the old reliable)... but after a couple of pains with the CruiseControl system (monolithic xml config file), we convinced him to switch to Hudson... (I don't think we ever looked back!)&lt;br /&gt;&lt;br /&gt;What we really liked was that Kohsuke had put in place a plugin framework, so I started writing plugins, and shortly afterwards convinced Peter that it was "cool" (even if he did have to use Maven to build the plugins - Peter is on the Apache ANT PMC).&lt;br /&gt;&lt;br /&gt;One of the earlier plugins that Peter wrote during his spare time was his "Simple Cobertura plugin" which allowed you to get the Cobertura coverage results on the build page&lt;span class="Apple-style-span" style="font-size:x-small;"&gt;&lt;i&gt;[1]&lt;/i&gt;&lt;/span&gt;.&amp;nbsp;Peter created his plugin against Hudson 1.129.&amp;nbsp;By this stage Peter and I had moved onto separate projects, eventually Peter left the company, but the team he was working on still had the .hpi for his "Simple Cobertura plugin". As they moved to newer and newer Hudson builds, the plugin kept on working (no recompile needed). I had my own plugins which were built for an earlier version of Hudson (my closed source SilkTest plugin, my original closed source AccuRev plugin [not to be confused with the open source one I subsequently developed and handed on to others to maintain]) which also were still working (with no recompile) in newer versions of Hudson&lt;br /&gt;&lt;br /&gt;Recently, I met up with Peter, and he told me the sad news.... his plugin is now broken... it no longer works in the latest version of Jenkins... this was strange news to me, as before I left my previous employer to join &lt;a rel="nofollow" target="_blank" href="http://www.cloudbees.com/"&gt;CloudBees&lt;/a&gt; I'd upgraded our CI servers to the latest and one of those was using Peter's&amp;nbsp;"Simple Cobertura plugin" which did not seem broken...&lt;br /&gt;&lt;br /&gt;After looking at Peter's code I finally found the problem... he was using the old javadoc annotation to mark the constructor as one for data binding, with one simple change:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;6,7d5&lt;br /&gt;&amp;lt; import org.kohsuke.stapler.DataBoundConstructor;&lt;br /&gt;&amp;lt; &lt;br /&gt;22a21&lt;br /&gt;&amp;gt;      * @stapler-constructor&lt;br /&gt;24d22&lt;br /&gt;&amp;lt;     @DataBoundConstructor&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;His plugin was back in action... Now I was puzzled, as I couldn't understand how I'd upgraded this old old plugin from Hudson 1.129 and got it running on Jenkins 1.397 without recompiling...&lt;br /&gt;&lt;br /&gt;Well I found out the answer, the version Peter had left in behind, didn't use the data bound constructor at all... it was doing&lt;br /&gt;&lt;pre&gt;    public Publisher newInstance(StaplerRequest req) throws FormException {&lt;br /&gt;        return new C2Publisher(req.getParameter("c2_coverReportDir"));&lt;br /&gt;    }&lt;br /&gt;&lt;/pre&gt;&lt;div&gt;While the code Peter had was doing&amp;nbsp;&lt;/div&gt;&lt;pre&gt;    public C2Publisher newInstance(StaplerRequest req, JSONObject obj) &lt;br /&gt;            throws FormException {&lt;br /&gt;        return req.bindParameters(C2Publisher.class, "c2_");&lt;br /&gt;    }&lt;br /&gt;&lt;/pre&gt;If you change it back to the old way, and you have enough Maven-foo to build against that old a version of Jenkins (née Hudson) you can end up with a plugin that works on both Hudson 1.129 and Jenkins 1.413...&lt;br /&gt;&lt;br /&gt;I am fairly sure that if I had a SilkTest license and a copy of the SilkTest plugin that I wrote against Hudson 1.96, it would also still run unmodified on Jenkins 1.413.&lt;br /&gt;&lt;br /&gt;How many projects can maintain &lt;b&gt;&lt;u&gt;that&lt;/u&gt;&lt;/b&gt; level of backwards compatibility.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size:x-small;"&gt;&lt;i&gt;[1]&lt;/i&gt; Peter wanted to have the coverage results on the main page, and at the time Kohsuke did not want to allow plugins to add columns to the main page... I came up with the compromise of adding a column which would be just one icon wide and have a tooltip to which plugins could contribute information... and that was the birth of the weather (health) icons&lt;i&gt;[2]&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size:x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size:x-small;"&gt;&lt;i&gt;[2]&lt;/i&gt; at the time Peter thought it would be cool if he could generate his own weather icon on the fly so that if you had high code coverage that would be a full&amp;nbsp;umbrella&amp;nbsp;while poor code coverage would be a tattered umbrella with no fabric and only the frame remaining... this is actually part of the API, so the technology to implement this has been there since 1.115... just nobody has done it... yet!&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21580788-4113129733343964320?l=javaadventure.blogspot.com' alt=''/&gt;&lt;/div&gt;</description>
         <author>Stephen Connolly</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-21580788.post-4113129733343964320</guid>
         <pubDate>Fri, 27 May 2011 14:55:00 +0000</pubDate>
      </item>
      <item>
         <title>The ones who love using GIT and Gerrit … like me :-)</title>
         <link>http://hudsonmobi.wordpress.com/2011/05/21/the-ones-who-love-using-git-and-gerrit-like-me/</link>
         <description>GerritForge is live ! We have been very busy working on GerritForge, the new SCM Adapter to use GIT and Gerrit with CollabNet TeamForge. If you use GIT and Gerrit every day &amp;#8230; and you want to convince your boss to use it officially, show him this Video ! It has been very successful with our [...]&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hudsonmobi.wordpress.com&amp;amp;blog=12790565&amp;amp;post=165&amp;amp;subd=hudsonmobi&amp;amp;ref=&amp;amp;feed=1" width="1" height="1"/&gt;</description>
         <guid isPermaLink="false">http://hudsonmobi.wordpress.com/?p=165</guid>
         <pubDate>Sat, 21 May 2011 11:17:13 +0000</pubDate>
         <content:encoded><![CDATA[<h2><span style="color:#808080;">Ge</span><span style="color:#ff0000;">rri</span><span style="color:#008000;">t</span><span style="color:#3366ff;">Forge</span> is live !</h2>
<span style="text-align:center;display:block;"><a rel="nofollow" target="_blank" href="http://hudsonmobi.wordpress.com/2011/05/21/the-ones-who-love-using-git-and-gerrit-like-me/"><img src="http://img.youtube.com/vi/2vXQ9LyvYHo/2.jpg" alt=""/></a></span>
<h2><span style="color:#808080;"><br />
</span></h2>
<p><strong>We have been very busy</strong> working on <a rel="nofollow" title="GerritForge" target="_blank" href="http://www.gerritforge.com">GerritForge</a>, the new SCM Adapter to use GIT and Gerrit with <a rel="nofollow" title="CollabNet TeamForge" target="_blank" href="http://www.open.collab.net/products/ctf/">CollabNet TeamForge</a>. If you use GIT and Gerrit every day &#8230; and you want to convince your boss to use it officially, show him this Video ! It has been very successful with our customers <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley'/> </p>
<p>After this major work, we will come back to Jenkins Mobi and <span style="color:#3366ff;"><strong>there are new cool features to come</strong></span> &#8230; stay tuned !</p>
<p><em>LMIT, GerritForge and JenkinsMobi development team.</em></p>
<br />  <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gocomments/hudsonmobi.wordpress.com/165/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hudsonmobi.wordpress.com/165/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godelicious/hudsonmobi.wordpress.com/165/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hudsonmobi.wordpress.com/165/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gofacebook/hudsonmobi.wordpress.com/165/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hudsonmobi.wordpress.com/165/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gotwitter/hudsonmobi.wordpress.com/165/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hudsonmobi.wordpress.com/165/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gostumble/hudsonmobi.wordpress.com/165/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hudsonmobi.wordpress.com/165/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godigg/hudsonmobi.wordpress.com/165/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hudsonmobi.wordpress.com/165/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/goreddit/hudsonmobi.wordpress.com/165/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hudsonmobi.wordpress.com/165/"/></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hudsonmobi.wordpress.com&amp;blog=12790565&amp;post=165&amp;subd=hudsonmobi&amp;ref=&amp;feed=1" width="1" height="1"/>]]></content:encoded>
         <media:content medium="image" url="http://1.gravatar.com/avatar/7beef3a3c76d83b955c22d1aadd99aa9?s=96&amp;amp;d=identicon&amp;amp;r=G">
            <media:title type="html">hudsonmobi</media:title>
         </media:content>
      </item>
      <item>
         <title>Continuously deploy your java apps to the cloud</title>
         <link>http://javaadventure.blogspot.com/2011/05/continuously-deploy-your-java-apps-to.html</link>
         <description>&lt;div class="separator" style="clear:both;text-align:left;"&gt;In my &lt;a rel="nofollow" target="_blank" href="http://javaadventure.blogspot.com/2011/05/deploy-your-java-apps-to-cloud.html"&gt;previous post&lt;/a&gt;&amp;nbsp;showed how easy it is to run your java application on &lt;a rel="nofollow" target="_blank" href="http://www.cloudbees.com/"&gt;CloudBees&lt;/a&gt;' RUN@cloud service. Today I'm going to use the &lt;a rel="nofollow" target="_blank" href="https://wiki.jenkins-ci.org/display/JENKINS/Cloudbees+Deployer+Plugin"&gt;CloudBees Deployer plugin for Jenkins&lt;/a&gt; that allows you to deploy your app to the cloud from your CI server. I am using the &lt;a rel="nofollow" target="_blank" href="http://www.cloudbees.com/dev.cb"&gt;DEV@cloud&lt;/a&gt; Jenkins service for my CI infrastructure, but you can use this plugin from your own &lt;a rel="nofollow" target="_blank" href="http://jenkins-ci.org/"&gt;Jenkins&lt;/a&gt; (or &lt;a rel="nofollow" target="_blank" href="http://nectar.cloudbees.com/"&gt;Nectar&lt;/a&gt;) server.&lt;/div&gt;&lt;br /&gt;So first step is to install the CloudBees Deployer plugin...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1. Goto Manage Jenkins&lt;br /&gt;&lt;div class="separator" style="clear:both;margin-bottom:0px;margin-left:0px;margin-right:0px;margin-top:0px;text-align:center;"&gt;&lt;a rel="nofollow" target="_blank" href="http://4.bp.blogspot.com/-3KYlccVpLcs/TdOMFgqS-7I/AAAAAAAAABw/ap-fQVzcVqI/s1600/Screen+shot+2011-05-18+at+09.43.35.png" style="margin-left:1em;margin-right:1em;"&gt;&lt;img border="0" height="424" src="http://4.bp.blogspot.com/-3KYlccVpLcs/TdOMFgqS-7I/AAAAAAAAABw/ap-fQVzcVqI/s640/Screen+shot+2011-05-18+at+09.43.35.png" width="640"/&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;2. Goto Manage Plugins&lt;/div&gt;&lt;div class="separator" style="clear:both;text-align:center;"&gt;&lt;a rel="nofollow" target="_blank" href="http://4.bp.blogspot.com/-EcHJmUwcbWk/TdOMF0JGRSI/AAAAAAAAAB0/bvmEn6krkz4/s1600/Screen+shot+2011-05-18+at+09.43.40.png" style="margin-left:1em;margin-right:1em;"&gt;&lt;img border="0" height="424" src="http://4.bp.blogspot.com/-EcHJmUwcbWk/TdOMF0JGRSI/AAAAAAAAAB0/bvmEn6krkz4/s640/Screen+shot+2011-05-18+at+09.43.40.png" width="640"/&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;3. Goto the Available tab&lt;/div&gt;&lt;div class="separator" style="clear:both;text-align:center;"&gt;&lt;a rel="nofollow" target="_blank" href="http://2.bp.blogspot.com/-3byLi7A49QI/TdOMG77BJfI/AAAAAAAAAB4/nmj7te6mIA0/s1600/Screen+shot+2011-05-18+at+09.43.46.png" style="margin-left:1em;margin-right:1em;"&gt;&lt;img border="0" height="424" src="http://2.bp.blogspot.com/-3byLi7A49QI/TdOMG77BJfI/AAAAAAAAAB4/nmj7te6mIA0/s640/Screen+shot+2011-05-18+at+09.43.46.png" width="640"/&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;4. Scroll down until you find the cloudbees-deployer-plugin. Check the box.&lt;/div&gt;&lt;div class="separator" style="clear:both;text-align:center;"&gt;&lt;a rel="nofollow" target="_blank" href="http://1.bp.blogspot.com/-74aFOsDEhoU/TdOMHNELSrI/AAAAAAAAAB8/ctFi1xo4a_8/s1600/Screen+shot+2011-05-18+at+09.43.55.png" style="margin-left:1em;margin-right:1em;"&gt;&lt;img border="0" height="424" src="http://1.bp.blogspot.com/-74aFOsDEhoU/TdOMHNELSrI/AAAAAAAAAB8/ctFi1xo4a_8/s640/Screen+shot+2011-05-18+at+09.43.55.png" width="640"/&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;5. Scroll down and click the Install button&lt;/div&gt;&lt;div class="separator" style="clear:both;text-align:center;"&gt;&lt;a rel="nofollow" target="_blank" href="http://3.bp.blogspot.com/-ibEv8NMGnho/TdOMHYNJyBI/AAAAAAAAACA/x4kyR53m6Gk/s1600/Screen+shot+2011-05-18+at+09.44.03.png" style="margin-left:1em;margin-right:1em;"&gt;&lt;img border="0" height="424" src="http://3.bp.blogspot.com/-ibEv8NMGnho/TdOMHYNJyBI/AAAAAAAAACA/x4kyR53m6Gk/s640/Screen+shot+2011-05-18+at+09.44.03.png" width="640"/&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;6. Restart Jenkins after it's installed.&lt;/div&gt;&lt;div class="separator" style="clear:both;text-align:center;"&gt;&lt;a rel="nofollow" target="_blank" href="http://4.bp.blogspot.com/-Yb2_nP0qrzo/TdOMHlzLUaI/AAAAAAAAACE/xTth0p5F2CQ/s1600/Screen+shot+2011-05-18+at+09.44.22.png" style="margin-left:1em;margin-right:1em;"&gt;&lt;img border="0" height="424" src="http://4.bp.blogspot.com/-Yb2_nP0qrzo/TdOMHlzLUaI/AAAAAAAAACE/xTth0p5F2CQ/s640/Screen+shot+2011-05-18+at+09.44.22.png" width="640"/&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear:both;text-align:center;"&gt;&lt;/div&gt;&lt;div&gt;7. Goto Manage Jenkins, select Configure and&amp;nbsp;scroll down to the bottom&lt;/div&gt;&lt;div class="separator" style="clear:both;text-align:center;"&gt;&lt;a rel="nofollow" target="_blank" href="http://3.bp.blogspot.com/--NTXGgwXdWc/TdONL4nVnJI/AAAAAAAAACI/mf7Z7NNyPI8/s1600/Screen+shot+2011-05-18+at+09.45.55.png" style="margin-left:1em;margin-right:1em;"&gt;&lt;img border="0" height="424" src="http://3.bp.blogspot.com/--NTXGgwXdWc/TdONL4nVnJI/AAAAAAAAACI/mf7Z7NNyPI8/s640/Screen+shot+2011-05-18+at+09.45.55.png" width="640"/&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;8. Click the Add button beside the CloudBees accounts&lt;/div&gt;&lt;div class="separator" style="clear:both;text-align:center;"&gt;&lt;a rel="nofollow" target="_blank" href="http://2.bp.blogspot.com/-qW9UJEoxp7o/TdONMCTiszI/AAAAAAAAACM/B-Qt1QKF4YE/s1600/Screen+shot+2011-05-18+at+09.46.02.png" style="margin-left:1em;margin-right:1em;"&gt;&lt;img border="0" height="424" src="http://2.bp.blogspot.com/-qW9UJEoxp7o/TdONMCTiszI/AAAAAAAAACM/B-Qt1QKF4YE/s640/Screen+shot+2011-05-18+at+09.46.02.png" width="640"/&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;9. Add in your CloudBees account details (which you can find on your&amp;nbsp;&lt;a rel="nofollow" target="_blank" href="https://grandcentral.cloudbees.com/user/keys"&gt;user keys screen on grandcentral&lt;/a&gt;)&lt;/div&gt;&lt;div class="separator" style="clear:both;text-align:center;"&gt;&lt;a rel="nofollow" target="_blank" href="http://4.bp.blogspot.com/-HsiABb95L2g/TdOOLf40YpI/AAAAAAAAACQ/LGpw2kPjCcU/s1600/Screen+shot+2011-05-18+at+09.51.19.png" style="margin-left:1em;margin-right:1em;"&gt;&lt;img border="0" height="424" src="http://4.bp.blogspot.com/-HsiABb95L2g/TdOOLf40YpI/AAAAAAAAACQ/LGpw2kPjCcU/s640/Screen+shot+2011-05-18+at+09.51.19.png" width="640"/&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;10. Click on Save and then goto the Configure page for your project. Enable CloudBees Deployment and fill in the details:&lt;/div&gt;&lt;div class="separator" style="clear:both;text-align:center;"&gt;&lt;a rel="nofollow" target="_blank" href="http://4.bp.blogspot.com/-dw_E0_47oDk/TdOOL50qoeI/AAAAAAAAACU/Ql_I0ZYvNPk/s1600/Screen+shot+2011-05-18+at+09.52.08.png" style="margin-left:1em;margin-right:1em;"&gt;&lt;img border="0" height="424" src="http://4.bp.blogspot.com/-dw_E0_47oDk/TdOOL50qoeI/AAAAAAAAACU/Ql_I0ZYvNPk/s640/Screen+shot+2011-05-18+at+09.52.08.png" width="640"/&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;11. Save and then kick off a build&lt;/div&gt;&lt;div class="separator" style="clear:both;text-align:center;"&gt;&lt;a rel="nofollow" target="_blank" href="http://4.bp.blogspot.com/-hjYfaX7DT6w/TdOOMpYEKCI/AAAAAAAAACc/3lUwEZsFJGM/s1600/Screen+shot+2011-05-18+at+09.53.06.png" style="margin-left:1em;margin-right:1em;"&gt;&lt;img border="0" height="424" src="http://4.bp.blogspot.com/-hjYfaX7DT6w/TdOOMpYEKCI/AAAAAAAAACc/3lUwEZsFJGM/s640/Screen+shot+2011-05-18+at+09.53.06.png" width="640"/&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;12. When the build is finished, your application has been deployed:&lt;/div&gt;&lt;div class="separator" style="clear:both;text-align:center;"&gt;&lt;a rel="nofollow" target="_blank" href="http://2.bp.blogspot.com/-9lXahzAh9Ac/TdOONLIAnyI/AAAAAAAAACg/abImJ0JZ1PQ/s1600/Screen+shot+2011-05-18+at+09.54.36.png" style="margin-left:1em;margin-right:1em;"&gt;&lt;img border="0" height="424" src="http://2.bp.blogspot.com/-9lXahzAh9Ac/TdOONLIAnyI/AAAAAAAAACg/abImJ0JZ1PQ/s640/Screen+shot+2011-05-18+at+09.54.36.png" width="640"/&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;There you go. Continuous Deployment on RUN@cloud.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There is a whole host of things you can do with this. &amp;nbsp;You can use build promotion to trigger the deployment, you can set up a staging deployment followed by the real thing if a test staging project builds successfully... I could go on... but there is always another day! Speaking of which, my next step will probably be enabling deployment straight from the project build (for those unfortunate enough to not have a CI server) probably using the &lt;a rel="nofollow" target="_blank" href="http://mojo.codehaus.org/ship-maven-plugin"&gt;ship-maven-plugin&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21580788-828264878015915640?l=javaadventure.blogspot.com' alt=''/&gt;&lt;/div&gt;</description>
         <author>Stephen Connolly</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-21580788.post-828264878015915640</guid>
         <pubDate>Wed, 18 May 2011 10:29:00 +0000</pubDate>
         <media:thumbnail height="72" url="http://4.bp.blogspot.com/-3KYlccVpLcs/TdOMFgqS-7I/AAAAAAAAABw/ap-fQVzcVqI/s72-c/Screen+shot+2011-05-18+at+09.43.35.png" width="72" />
      </item>
      <item>
         <title>Deploy your java apps to the cloud</title>
         <link>http://javaadventure.blogspot.com/2011/05/deploy-your-java-apps-to-cloud.html</link>
         <description>I work for &lt;a rel="nofollow" target="_blank" href="http://www.cloudbees.com/"&gt;CloudBees Inc.&lt;/a&gt;, they are a great company with great products. I have mostly been working on the &lt;a rel="nofollow" target="_blank" href="http://www.cloudbees.com/dev.cb"&gt;DEV@&lt;/a&gt; side of the fence which is focused on continuous integration and basically the development side of your application, but we also have the &lt;a rel="nofollow" target="_blank" href="http://www.cloudbees.com/run.cb"&gt;RUN@&lt;/a&gt; side of the fence where we provide a &lt;a rel="nofollow" target="_blank" href="http://en.wikipedia.org/wiki/Platform_as_a_service"&gt;platform as a service (PaaS)&lt;/a&gt; for running your java web applications on the cloud. I could give you the sales pitch, but I'll leave it at: the technologies and people behind RUN@ were one of the key reasons why I decided to join CloudBees.&lt;br /&gt;&lt;br /&gt;Well I've been busy on &lt;a rel="nofollow" target="_blank" href="http://nectar.cloudbees.com/products-features-scale.cb#rbac"&gt;some stuff&lt;/a&gt; since joining, so I decided it was time to actually try out the RUN@ stuff for my self. &amp;nbsp;So here is my experience:&lt;br /&gt;&lt;br /&gt;My test application:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;I'm on the &lt;a rel="nofollow" target="_blank" href="http://maven.apache.org/"&gt;Apache Maven&lt;/a&gt; PMC, so I'm going to build it with... shock... horror... Maven.&lt;/li&gt;&lt;li&gt;I am partial to the odd bit of JSF, so it will be a JSF 2.0 application based off of &lt;a rel="nofollow" target="_blank" href="http://myfaces.apache.org/"&gt;Apache MyFaces&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;I love &lt;a rel="nofollow" target="_blank" href="http://eclipse.org/jetty/"&gt;Jetty&lt;/a&gt; as a servlet container for local testing, so we'll use that hammer too.&lt;/li&gt;&lt;/ul&gt;Let's get started...&lt;br /&gt;&lt;br /&gt;First the pom.xml&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&lt;br /&gt;         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"&amp;gt;&lt;br /&gt;  &amp;lt;modelVersion&amp;gt;4.0.0&amp;lt;/modelVersion&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;!-- basic information --&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;groupId&amp;gt;com.blogspot.javaadventure.cloudbees.run&amp;lt;/groupId&amp;gt;&lt;br /&gt;  &amp;lt;artifactId&amp;gt;jsf2-hello-world&amp;lt;/artifactId&amp;gt;&lt;br /&gt;  &amp;lt;version&amp;gt;0.1-SNAPSHOT&amp;lt;/version&amp;gt;&lt;br /&gt;  &amp;lt;packaging&amp;gt;war&amp;lt;/packaging&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;!-- Project information --&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;name&amp;gt;JSF 2.0 Hello World&amp;lt;/name&amp;gt;&lt;br /&gt;  &amp;lt;description&amp;gt;&lt;br /&gt;    A JSF 2.0 web application that says hello world.&lt;br /&gt;  &amp;lt;/description&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;properties&amp;gt;&lt;br /&gt;    &amp;lt;project.reporting.outputEncoding&amp;gt;UTF-8&amp;lt;/project.reporting.outputEncoding&amp;gt;&lt;br /&gt;    &amp;lt;project.build.outputEncoding&amp;gt;UTF-8&amp;lt;/project.build.outputEncoding&amp;gt;&lt;br /&gt;    &amp;lt;project.build.sourceEncoding&amp;gt;UTF-8&amp;lt;/project.build.sourceEncoding&amp;gt;&lt;br /&gt;  &amp;lt;/properties&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;!-- Dependency details --&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;dependencies&amp;gt;&lt;br /&gt;    &amp;lt;dependency&amp;gt;&lt;br /&gt;      &amp;lt;groupId&amp;gt;org.apache.myfaces.core&amp;lt;/groupId&amp;gt;&lt;br /&gt;      &amp;lt;artifactId&amp;gt;myfaces-api&amp;lt;/artifactId&amp;gt;&lt;br /&gt;      &amp;lt;version&amp;gt;2.0.5&amp;lt;/version&amp;gt;&lt;br /&gt;    &amp;lt;/dependency&amp;gt;&lt;br /&gt;    &amp;lt;dependency&amp;gt;&lt;br /&gt;      &amp;lt;groupId&amp;gt;org.apache.myfaces.core&amp;lt;/groupId&amp;gt;&lt;br /&gt;      &amp;lt;artifactId&amp;gt;myfaces-impl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;      &amp;lt;version&amp;gt;2.0.5&amp;lt;/version&amp;gt;&lt;br /&gt;    &amp;lt;/dependency&amp;gt;&lt;br /&gt;    &amp;lt;dependency&amp;gt;&lt;br /&gt;      &amp;lt;groupId&amp;gt;junit&amp;lt;/groupId&amp;gt;&lt;br /&gt;      &amp;lt;artifactId&amp;gt;junit&amp;lt;/artifactId&amp;gt;&lt;br /&gt;      &amp;lt;version&amp;gt;4.8.2&amp;lt;/version&amp;gt;&lt;br /&gt;      &amp;lt;scope&amp;gt;test&amp;lt;/scope&amp;gt;&lt;br /&gt;    &amp;lt;/dependency&amp;gt;&lt;br /&gt;  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;!-- Build settings --&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;build&amp;gt;&lt;br /&gt;    &amp;lt;pluginManagement&amp;gt;&lt;br /&gt;      &amp;lt;plugins&amp;gt;&lt;br /&gt;        &amp;lt;plugin&amp;gt;&lt;br /&gt;          &amp;lt;artifactId&amp;gt;maven-clean-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;          &amp;lt;version&amp;gt;2.4.1&amp;lt;/version&amp;gt;&lt;br /&gt;        &amp;lt;/plugin&amp;gt;&lt;br /&gt;        &amp;lt;plugin&amp;gt;&lt;br /&gt;          &amp;lt;artifactId&amp;gt;maven-compiler-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;          &amp;lt;version&amp;gt;2.3.2&amp;lt;/version&amp;gt;&lt;br /&gt;          &amp;lt;configuration&amp;gt;&lt;br /&gt;            &amp;lt;source&amp;gt;1.6&amp;lt;/source&amp;gt;&lt;br /&gt;            &amp;lt;target&amp;gt;1.6&amp;lt;/target&amp;gt;&lt;br /&gt;          &amp;lt;/configuration&amp;gt;&lt;br /&gt;        &amp;lt;/plugin&amp;gt;&lt;br /&gt;        &amp;lt;plugin&amp;gt;&lt;br /&gt;          &amp;lt;artifactId&amp;gt;maven-deploy-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;          &amp;lt;version&amp;gt;2.6&amp;lt;/version&amp;gt;&lt;br /&gt;        &amp;lt;/plugin&amp;gt;&lt;br /&gt;        &amp;lt;plugin&amp;gt;&lt;br /&gt;          &amp;lt;artifactId&amp;gt;maven-failsafe-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;          &amp;lt;version&amp;gt;2.8.1&amp;lt;/version&amp;gt;&lt;br /&gt;          &amp;lt;executions&amp;gt;&lt;br /&gt;            &amp;lt;execution&amp;gt;&lt;br /&gt;              &amp;lt;goals&amp;gt;&lt;br /&gt;                &amp;lt;goal&amp;gt;integration-test&amp;lt;/goal&amp;gt;&lt;br /&gt;                &amp;lt;goal&amp;gt;verify&amp;lt;/goal&amp;gt;&lt;br /&gt;              &amp;lt;/goals&amp;gt;&lt;br /&gt;            &amp;lt;/execution&amp;gt;&lt;br /&gt;          &amp;lt;/executions&amp;gt;&lt;br /&gt;        &amp;lt;/plugin&amp;gt;&lt;br /&gt;        &amp;lt;plugin&amp;gt;&lt;br /&gt;          &amp;lt;artifactId&amp;gt;maven-install-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;          &amp;lt;version&amp;gt;2.3.1&amp;lt;/version&amp;gt;&lt;br /&gt;        &amp;lt;/plugin&amp;gt;&lt;br /&gt;        &amp;lt;plugin&amp;gt;&lt;br /&gt;          &amp;lt;artifactId&amp;gt;maven-jar-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;          &amp;lt;version&amp;gt;2.3.1&amp;lt;/version&amp;gt;&lt;br /&gt;        &amp;lt;/plugin&amp;gt;&lt;br /&gt;        &amp;lt;plugin&amp;gt;&lt;br /&gt;          &amp;lt;artifactId&amp;gt;maven-surefire-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;          &amp;lt;version&amp;gt;2.8.1&amp;lt;/version&amp;gt;&lt;br /&gt;        &amp;lt;/plugin&amp;gt;&lt;br /&gt;        &amp;lt;plugin&amp;gt;&lt;br /&gt;          &amp;lt;artifactId&amp;gt;maven-release-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;          &amp;lt;version&amp;gt;2.1&amp;lt;/version&amp;gt;&lt;br /&gt;        &amp;lt;/plugin&amp;gt;&lt;br /&gt;        &amp;lt;plugin&amp;gt;&lt;br /&gt;          &amp;lt;artifactId&amp;gt;maven-resources-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;          &amp;lt;version&amp;gt;2.5&amp;lt;/version&amp;gt;&lt;br /&gt;        &amp;lt;/plugin&amp;gt;&lt;br /&gt;        &amp;lt;plugin&amp;gt;&lt;br /&gt;          &amp;lt;groupId&amp;gt;org.mortbay.jetty&amp;lt;/groupId&amp;gt;&lt;br /&gt;          &amp;lt;artifactId&amp;gt;jetty-maven-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;          &amp;lt;version&amp;gt;8.0.0.M2&amp;lt;/version&amp;gt;&lt;br /&gt;        &amp;lt;/plugin&amp;gt;&lt;br /&gt;      &amp;lt;/plugins&amp;gt;&lt;br /&gt;    &amp;lt;/pluginManagement&amp;gt;&lt;br /&gt;    &amp;lt;plugins&amp;gt;&lt;br /&gt;      &amp;lt;plugin&amp;gt;&lt;br /&gt;        &amp;lt;artifactId&amp;gt;maven-release-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;        &amp;lt;configuration&amp;gt;&lt;br /&gt;          &amp;lt;autoVersionSubmodules&amp;gt;true&amp;lt;/autoVersionSubmodules&amp;gt;&lt;br /&gt;          &amp;lt;goals&amp;gt;install&amp;lt;/goals&amp;gt;&lt;br /&gt;        &amp;lt;/configuration&amp;gt;&lt;br /&gt;      &amp;lt;/plugin&amp;gt;&lt;br /&gt;    &amp;lt;/plugins&amp;gt;&lt;br /&gt;  &amp;lt;/build&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/project&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;Then the src/main/webapp/WEB-INF/web.xml&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"&lt;br /&gt;         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&lt;br /&gt;         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"&amp;gt;&lt;br /&gt;  &amp;lt;display-name&amp;gt;JSF 2.0 Hello World&amp;lt;/display-name&amp;gt;&lt;br /&gt;  &amp;lt;description&amp;gt;&lt;br /&gt;    A JSF 2.0 web application that says hello world.&lt;br /&gt;  &amp;lt;/description&amp;gt;&lt;br /&gt;  &amp;lt;context-param&amp;gt;&lt;br /&gt;    &amp;lt;param-name&amp;gt;javax.faces.STATE_SAVING_METHOD&amp;lt;/param-name&amp;gt;&lt;br /&gt;    &amp;lt;param-value&amp;gt;server&amp;lt;/param-value&amp;gt;&lt;br /&gt;  &amp;lt;/context-param&amp;gt;&lt;br /&gt;  &amp;lt;context-param&amp;gt;&lt;br /&gt;    &amp;lt;param-name&amp;gt;javax.faces.DEFAULT_SUFFIX&amp;lt;/param-name&amp;gt;&lt;br /&gt;    &amp;lt;param-value&amp;gt;.xhtml&amp;lt;/param-value&amp;gt;&lt;br /&gt;  &amp;lt;/context-param&amp;gt;&lt;br /&gt;  &amp;lt;context-param&amp;gt;&lt;br /&gt;    &amp;lt;param-name&amp;gt;javax.faces.FACELETS_SKIP_COMMENTS&amp;lt;/param-name&amp;gt;&lt;br /&gt;    &amp;lt;param-value&amp;gt;true&amp;lt;/param-value&amp;gt;&lt;br /&gt;  &amp;lt;/context-param&amp;gt;&lt;br /&gt;  &amp;lt;context-param&amp;gt;&lt;br /&gt;    &amp;lt;param-name&amp;gt;javax.faces.PROJECT_STAGE&amp;lt;/param-name&amp;gt;&lt;br /&gt;    &amp;lt;param-value&amp;gt;Production&amp;lt;/param-value&amp;gt;&lt;br /&gt;    &amp;lt;!--param-value&amp;gt;Development&amp;lt;/param-value--&amp;gt;&lt;br /&gt;  &amp;lt;/context-param&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;!-- [jetty] does not initialize myfaces correctly for some reason --&amp;gt;&lt;br /&gt;  &amp;lt;listener&amp;gt;&lt;br /&gt;    &amp;lt;listener-class&amp;gt;org.apache.myfaces.webapp.StartupServletContextListener&amp;lt;/listener-class&amp;gt;&lt;br /&gt;  &amp;lt;/listener&amp;gt;&lt;br /&gt;  &amp;lt;!-- [/jetty] --&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;servlet&amp;gt;&lt;br /&gt;    &amp;lt;servlet-name&amp;gt;Faces Servlet&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;    &amp;lt;servlet-class&amp;gt;javax.faces.webapp.FacesServlet&amp;lt;/servlet-class&amp;gt;&lt;br /&gt;    &amp;lt;load-on-startup&amp;gt;1&amp;lt;/load-on-startup&amp;gt;&lt;br /&gt;  &amp;lt;/servlet&amp;gt;&lt;br /&gt;  &amp;lt;servlet-mapping&amp;gt;&lt;br /&gt;    &amp;lt;servlet-name&amp;gt;Faces Servlet&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;    &amp;lt;url-pattern&amp;gt;*.xhtml&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;  &amp;lt;/servlet-mapping&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;session-config&amp;gt;&lt;br /&gt;    &amp;lt;session-timeout&amp;gt;60&amp;lt;/session-timeout&amp;gt;&lt;br /&gt;  &amp;lt;/session-config&amp;gt;&lt;br /&gt;  &amp;lt;welcome-file-list&amp;gt;&lt;br /&gt;    &amp;lt;welcome-file&amp;gt;index.xhtml&amp;lt;/welcome-file&amp;gt;&lt;br /&gt;  &amp;lt;/welcome-file-list&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/web-app&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;Then the backing bean (src/main/java/com/blogspot/javaadventure/cloudbees/run/GreeterBean.java)&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;package com.blogspot.javaadventure.cloudbees.run;&lt;br /&gt;&lt;br /&gt;import javax.faces.bean.ManagedBean;&lt;br /&gt;import javax.faces.bean.ViewScoped;&lt;br /&gt;import java.io.Serializable;&lt;br /&gt;&lt;br /&gt;@ManagedBean(name="greeter")&lt;br /&gt;@ViewScoped&lt;br /&gt;public class GreeterBean implements Serializable {&lt;br /&gt;    private String name;&lt;br /&gt;&lt;br /&gt;    public String getName() {&lt;br /&gt;        return name;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void setName(String name) {&lt;br /&gt;        this.name = name;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public String getResponse() {&lt;br /&gt;        if (name != null &amp;amp;&amp;amp; !name.isEmpty()) {&lt;br /&gt;            return "Hello " + name;&lt;br /&gt;        } else {&lt;br /&gt;            return null;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;Should always have some tests (src/test/java/com/blogspot/javaadventure/cloudbees/run/GreeterBeanTest.java)&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;package com.blogspot.javaadventure.cloudbees.run;&lt;br /&gt;&lt;br /&gt;import org.junit.Test;&lt;br /&gt;&lt;br /&gt;import static org.hamcrest.CoreMatchers.*;&lt;br /&gt;import static org.junit.Assert.*;&lt;br /&gt;&lt;br /&gt;public class GreeterBeanTest {&lt;br /&gt;    @Test&lt;br /&gt;    public void nullNameMeansNoGreeting() throws Exception {&lt;br /&gt;        GreeterBean instance = new GreeterBean();&lt;br /&gt;        instance.setName(null);&lt;br /&gt;        assertThat(instance.getResponse(), nullValue());&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    @Test&lt;br /&gt;    public void noNameMeansNoGreeting() throws Exception {&lt;br /&gt;        GreeterBean instance = new GreeterBean();&lt;br /&gt;        instance.setName("");&lt;br /&gt;        assertThat(instance.getResponse(), nullValue());&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    @Test&lt;br /&gt;    public void aNameMeansGreeting() throws Exception {&lt;br /&gt;        GreeterBean instance = new GreeterBean();&lt;br /&gt;        instance.setName("Fred");&lt;br /&gt;        assertThat(instance.getResponse(), notNullValue());&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/blockquote&gt;Next the page of our web application (src/main/webapp/index.xhtml), i'm going to use the JSF 2.0 ajax support (because it's there)&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"&lt;br /&gt;        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;&lt;br /&gt;&amp;lt;html xmlns="http://www.w3.org/1999/xhtml"&lt;br /&gt;      xmlns:ui="http://java.sun.com/jsf/facelets"&lt;br /&gt;      xmlns:h="http://java.sun.com/jsf/html"&lt;br /&gt;      xmlns:f="http://java.sun.com/jsf/core"&amp;gt;&lt;br /&gt;&amp;lt;ui:insert name="metadata"/&amp;gt;&lt;br /&gt;&amp;lt;h:head&amp;gt;&lt;br /&gt;    &amp;lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/&amp;gt;&lt;br /&gt;    &amp;lt;title&amp;gt;&lt;br /&gt;        JSF 2.0 Hello World&lt;br /&gt;    &amp;lt;/title&amp;gt;&lt;br /&gt;&amp;lt;/h:head&amp;gt;&lt;br /&gt;&amp;lt;h:body&amp;gt;&lt;br /&gt;    &amp;lt;f:view&amp;gt;&lt;br /&gt;        &amp;lt;h:form&amp;gt;&lt;br /&gt;            &amp;lt;h:outputLabel for="greeter" value="Please tell me your name:"/&amp;gt;&lt;br /&gt;            &amp;lt;h:inputText id="greeter" value="#{greeter.name}"&amp;gt;&lt;br /&gt;                &amp;lt;f:ajax event="keyup" render="text"/&amp;gt;&lt;br /&gt;            &amp;lt;/h:inputText&amp;gt;&lt;br /&gt;        &amp;lt;/h:form&amp;gt;&lt;br /&gt;        &amp;lt;h:outputText id="text" value="${greeter.response}"/&amp;gt;&lt;br /&gt;    &amp;lt;/f:view&amp;gt;&lt;br /&gt;&amp;lt;/h:body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;Let's test it locally&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;$ mvn jetty:run&lt;/pre&gt;&lt;pre&gt;[INFO] Scanning for projects...&lt;br /&gt;[INFO]                                                                         &lt;br /&gt;[INFO] ------------------------------------------------------------------------&lt;br /&gt;[INFO] Building JSF 2.0 Hello World 0.1-SNAPSHOT&lt;br /&gt;[INFO] ------------------------------------------------------------------------&lt;br /&gt;[INFO] &lt;br /&gt;&lt;/pre&gt;&lt;pre&gt;...&lt;/pre&gt;&lt;pre&gt;WARNING: &lt;br /&gt;&lt;br /&gt;*******************************************************************&lt;br /&gt;*** WARNING: Apache MyFaces-2 is running in DEVELOPMENT mode.   ***&lt;br /&gt;***                                         ^^^^^^^^^^^         ***&lt;br /&gt;*** Do NOT deploy to your live server(s) without changing this. ***&lt;br /&gt;*** See Application#getProjectStage() for more information.     ***&lt;br /&gt;*******************************************************************&lt;br /&gt;&lt;br /&gt;2011-05-17 10:22:10.982:INFO::Started SelectChannelConnector@0.0.0.0:8080&lt;br /&gt;[INFO] Started Jetty Server&lt;br /&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Fire up a browser to http://localhost:8080/ and here's what we get:&lt;/div&gt;&lt;div class="separator" style="clear:both;text-align:center;"&gt;&lt;a rel="nofollow" target="_blank" href="http://1.bp.blogspot.com/-uT5H_QxEFJ4/TdI-3s8A-VI/AAAAAAAAABo/vDQmZXZf_Vk/s1600/Screen+shot+2011-05-17+at+10.24.27.png" style="margin-left:1em;margin-right:1em;"&gt;&lt;img border="0" height="257" src="http://1.bp.blogspot.com/-uT5H_QxEFJ4/TdI-3s8A-VI/AAAAAAAAABo/vDQmZXZf_Vk/s320/Screen+shot+2011-05-17+at+10.24.27.png" width="320"/&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;OK, so now I turn off DEVELOPMENT mode in the web.xml, build my app and deploy it to RUN@cloud... and &lt;a rel="nofollow" target="_blank" href="http://jsf2-hello-world.stephenc.cloudbees.net/"&gt;here&lt;/a&gt;'s what we get:&lt;/div&gt;&lt;div class="separator" style="clear:both;text-align:center;"&gt;&lt;a rel="nofollow" target="_blank" href="http://4.bp.blogspot.com/-uqTMwA58wW4/TdI_3ZaTi1I/AAAAAAAAABs/M_kvGO67ll0/s1600/Screen+shot+2011-05-17+at+10.28.45.png" style="margin-left:1em;margin-right:1em;"&gt;&lt;img border="0" height="257" src="http://4.bp.blogspot.com/-uqTMwA58wW4/TdI_3ZaTi1I/AAAAAAAAABs/M_kvGO67ll0/s320/Screen+shot+2011-05-17+at+10.28.45.png" width="320"/&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;That was cool. Didn't have to change anything (other than switch to production mode for safety as it's being deployed in the wild) and I did all this in under 20 minutes (including signing up for RUN@cloud)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;My next steps will be to integrate this web application with DEV@cloud and our Jenkins plugin for deployment to RUN@cloud so that I can show off continuous deployment! But that will be a different day!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21580788-1753910047661907517?l=javaadventure.blogspot.com' alt=''/&gt;&lt;/div&gt;</description>
         <author>Stephen Connolly</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-21580788.post-1753910047661907517</guid>
         <pubDate>Tue, 17 May 2011 10:40:00 +0000</pubDate>
         <media:thumbnail height="72" url="http://1.bp.blogspot.com/-uT5H_QxEFJ4/TdI-3s8A-VI/AAAAAAAAABo/vDQmZXZf_Vk/s72-c/Screen+shot+2011-05-17+at+10.24.27.png" width="72" />
      </item>
      <item>
         <title>Warning: Jenkins XML-API broken since Ver. 1.399</title>
         <link>http://hudsonmobi.wordpress.com/2011/04/14/warning-jenkins-xml-api-broken-since-ver-1-399/</link>
         <description>HudsonMobi users, be careful on Jenkins 1.399 ! A regression has been in the XML-API: https://issues.jenkins-ci.org/browse/JENKINS-8988. You are advised to stay on Ver. 1.398 (you can downgrade easily by getting the old jenkins.war file from this link: jenkins.war) HudsonMobi is currently using the XML-API for communicating with your Hudson/Jenkins back-end and users upgrading to Jenkins 1.401 has [...]&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hudsonmobi.wordpress.com&amp;amp;blog=12790565&amp;amp;post=159&amp;amp;subd=hudsonmobi&amp;amp;ref=&amp;amp;feed=1" width="1" height="1"/&gt;</description>
         <guid isPermaLink="false">http://hudsonmobi.wordpress.com/?p=159</guid>
         <pubDate>Thu, 14 Apr 2011 07:46:29 +0000</pubDate>
         <content:encoded><![CDATA[<p><a rel="nofollow" target="_blank" href="http://hudsonmobi.files.wordpress.com/2011/04/warning.png"><img class="alignleft size-full wp-image-160" title="warning" src="http://hudsonmobi.files.wordpress.com/2011/04/warning.png?w=600" alt=""/></a></p>
<p><strong>HudsonMobi users, be careful on Jenkins 1.399 !</strong></p>
<p>A regression has been in the XML-API: <a rel="nofollow" title="JENKINS-8988" target="_blank" href="https://issues.jenkins-ci.org/browse/JENKINS-8988">https://issues.jenkins-ci.org/browse/JENKINS-8988</a>.</p>
<p><span style="color:#339966;"><strong>You are advised to stay on Ver. 1.398</strong></span> (you can downgrade easily by getting the old jenkins.war file from this link: <a rel="nofollow" target="_blank" href="http://mirrors.jenkins-ci.org/war/1.398/jenkins.war">jenkins.war</a>)</p>
<p>HudsonMobi is currently using the XML-API for communicating with your Hudson/Jenkins back-end and users upgrading to Jenkins 1.401 has encountered communication problems.</p>
<p><strong>Stay tuned on the resolution of issue JENKINS-8988</strong>: once that issue will be fixed, you can easily upgrade and keep on enjoying HudsonMobi &#8220;on-the-road&#8221; <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley'/> </p>
<p>HudsonMobi / JenkinsMobi Development Team.</p>
<br />  <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gocomments/hudsonmobi.wordpress.com/159/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hudsonmobi.wordpress.com/159/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godelicious/hudsonmobi.wordpress.com/159/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hudsonmobi.wordpress.com/159/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gofacebook/hudsonmobi.wordpress.com/159/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hudsonmobi.wordpress.com/159/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gotwitter/hudsonmobi.wordpress.com/159/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hudsonmobi.wordpress.com/159/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gostumble/hudsonmobi.wordpress.com/159/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hudsonmobi.wordpress.com/159/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godigg/hudsonmobi.wordpress.com/159/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hudsonmobi.wordpress.com/159/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/goreddit/hudsonmobi.wordpress.com/159/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hudsonmobi.wordpress.com/159/"/></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hudsonmobi.wordpress.com&amp;blog=12790565&amp;post=159&amp;subd=hudsonmobi&amp;ref=&amp;feed=1" width="1" height="1"/>]]></content:encoded>
         <media:content medium="image" url="http://1.gravatar.com/avatar/7beef3a3c76d83b955c22d1aadd99aa9?s=96&amp;amp;d=identicon&amp;amp;r=G">
            <media:title type="html">hudsonmobi</media:title>
         </media:content>
         <media:content medium="image" url="http://hudsonmobi.files.wordpress.com/2011/04/warning.png">
            <media:title type="html">warning</media:title>
         </media:content>
      </item>
      <item>
         <title>First steps for using Git, even in your Enterprise with Jenkins CI</title>
         <link>http://hudsonmobi.wordpress.com/2011/04/06/first-steps-for-using-git-even-in-your-enterprise-with-jenkins-ci/</link>
         <description>If you think about using Git in your Enterprise Projects, the following slides may help you. I have presented Git and GitEnterprise in a 3h workshop in Krakow for 33degree.org Java conference. Hope you will find it useful for leveraging the full power of Git without major problems. Let me know what do you think [...]&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hudsonmobi.wordpress.com&amp;amp;blog=12790565&amp;amp;post=152&amp;amp;subd=hudsonmobi&amp;amp;ref=&amp;amp;feed=1" width="1" height="1"/&gt;</description>
         <guid isPermaLink="false">http://hudsonmobi.wordpress.com/?p=152</guid>
         <pubDate>Wed, 06 Apr 2011 17:18:45 +0000</pubDate>
         <content:encoded><![CDATA[<p>If you think about using <span style="color:#ff0000;"><strong>Git in your Enterprise Projects</strong></span>, the following slides may help you.</p>
 
<p>I have presented Git and <a rel="nofollow" title="Git Enterprise" target="_blank" href="http://www.gitenterprise.com">GitEnterprise</a> in a 3h workshop in Krakow for <strong><a rel="nofollow" title="33degree Java Conference" target="_blank" href="http://33degree.org"><span style="color:#339966;">33degree.org Java conference</span></a><span style="color:#339966;">.</span></strong><br />
Hope you will find it useful for leveraging the full power of Git without major problems.</p>
<p>Let me know what do you think about it.</p>
<p><span style="text-decoration:underline;"><em>Luca Milanesio &#8211; JenkinsMobi Development Team. </em></span></p>
<br />  <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gocomments/hudsonmobi.wordpress.com/152/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hudsonmobi.wordpress.com/152/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godelicious/hudsonmobi.wordpress.com/152/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hudsonmobi.wordpress.com/152/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gofacebook/hudsonmobi.wordpress.com/152/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hudsonmobi.wordpress.com/152/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gotwitter/hudsonmobi.wordpress.com/152/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hudsonmobi.wordpress.com/152/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gostumble/hudsonmobi.wordpress.com/152/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hudsonmobi.wordpress.com/152/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godigg/hudsonmobi.wordpress.com/152/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hudsonmobi.wordpress.com/152/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/goreddit/hudsonmobi.wordpress.com/152/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hudsonmobi.wordpress.com/152/"/></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hudsonmobi.wordpress.com&amp;blog=12790565&amp;post=152&amp;subd=hudsonmobi&amp;ref=&amp;feed=1" width="1" height="1"/>]]></content:encoded>
         <media:content medium="image" url="http://1.gravatar.com/avatar/7beef3a3c76d83b955c22d1aadd99aa9?s=96&amp;amp;d=identicon&amp;amp;r=G">
            <media:title type="html">hudsonmobi</media:title>
         </media:content>
      </item>
      <item>
         <title>Free GIT repository for your Jenkins CI project</title>
         <link>http://hudsonmobi.wordpress.com/2011/02/16/free-git-repository-for-your-jenkins-ci-project/</link>
         <description>I am pleased to announce that our friend project, GIT Enterprise, is finally live ! If you need a FREE enterprise-evel GIT Repository, with all the Enterprise level features: Private users provisioning Groups management Private repositories Fine-grained access control Full auditing and security &amp;#8230; you can simply register for free at http://gitent-scm.com and you can [...]&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hudsonmobi.wordpress.com&amp;amp;blog=12790565&amp;amp;post=146&amp;amp;subd=hudsonmobi&amp;amp;ref=&amp;amp;feed=1" width="1" height="1"/&gt;</description>
         <guid isPermaLink="false">http://hudsonmobi.wordpress.com/?p=146</guid>
         <pubDate>Wed, 16 Feb 2011 17:56:21 +0000</pubDate>
         <content:encoded><![CDATA[<p>I am pleased to announce that our friend project, <a rel="nofollow" title="GIT Enterprise" target="_blank" href="http://gitenterprise.com">GIT Enterprise</a>, is finally live !</p>
<span style="text-align:center;display:block;"><a rel="nofollow" target="_blank" href="http://hudsonmobi.wordpress.com/2011/02/16/free-git-repository-for-your-jenkins-ci-project/"><img src="http://img.youtube.com/vi/unJxlD2aopY/2.jpg" alt=""/></a></span>
<p>If you need a <a rel="nofollow" title="GIT Enterprise for FREE" target="_blank" href="http://gitenterprise.com/index.php/pricing.html">FREE enterprise-evel GIT Repository</a>, with all the Enterprise level features:</p>
<ol>
<li>Private users provisioning</li>
<li>Groups management</li>
<li>Private repositories</li>
<li>Fine-grained access control</li>
<li>Full auditing and security</li>
</ol>
<p>&#8230; you can simply register for free at <a rel="nofollow" title="GITEnterprise sign-up" target="_blank" href="https://gitent-scm.com/gitent/users/SignUp.git">http://gitent-scm.com</a> and you can create right now your domain, create your repository and use it with Jenkins CI &#8230; and of course you can monitor and schedule builds on the road with <a rel="nofollow" target="_blank" href="http://jenkins-mobi.com">JenkinsMobi</a> <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley'/> </p>
<p>You can then save up to $ 22.00 over the same GITHub offering &#8230; and donate the money on our behalf to your favourite OpenSource Project.</p>
<p>Enjoy GIT for FREE in your Enterprise, no hassles for quotes, no hassles for licenses and fully secure.</p>
<p>JenkinsMobi development team.</p>
<br />  <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gocomments/hudsonmobi.wordpress.com/146/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hudsonmobi.wordpress.com/146/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godelicious/hudsonmobi.wordpress.com/146/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hudsonmobi.wordpress.com/146/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gofacebook/hudsonmobi.wordpress.com/146/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hudsonmobi.wordpress.com/146/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gotwitter/hudsonmobi.wordpress.com/146/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hudsonmobi.wordpress.com/146/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gostumble/hudsonmobi.wordpress.com/146/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hudsonmobi.wordpress.com/146/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godigg/hudsonmobi.wordpress.com/146/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hudsonmobi.wordpress.com/146/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/goreddit/hudsonmobi.wordpress.com/146/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hudsonmobi.wordpress.com/146/"/></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hudsonmobi.wordpress.com&amp;blog=12790565&amp;post=146&amp;subd=hudsonmobi&amp;ref=&amp;feed=1" width="1" height="1"/>]]></content:encoded>
         <media:content medium="image" url="http://1.gravatar.com/avatar/7beef3a3c76d83b955c22d1aadd99aa9?s=96&amp;amp;d=identicon&amp;amp;r=G">
            <media:title type="html">hudsonmobi</media:title>
         </media:content>
      </item>
      <item>
         <title>Update to the Hudson book</title>
         <link>http://janmaterne.wordpress.com/2010/11/22/update-to-the-hudson-book/</link>
         <description>News from the Hudson by Simon Wiest book I reviewed: it is now in the press and if you order it (e.g. at Amazon), you should be able to read it by Xmas (if you can read German :-O )&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=janmaterne.wordpress.com&amp;amp;blog=544265&amp;amp;post=304&amp;amp;subd=janmaterne&amp;amp;ref=&amp;amp;feed=1" width="1" height="1"/&gt;</description>
         <guid isPermaLink="false">http://janmaterne.wordpress.com/?p=304</guid>
         <pubDate>Mon, 22 Nov 2010 20:58:23 +0000</pubDate>
         <content:encoded><![CDATA[<p>News from the <a rel="nofollow" title="Hudsons homepage" target="_blank" href="http://hudson-ci.org/">Hudson</a> by <a rel="nofollow" title="Homepage Simon Wiest" target="_blank" href="http://www.simonwiest.de/">Simon Wiest</a> <a rel="nofollow" title="Book at the publisher" target="_blank" href="http://www.dpunkt.de/buecher/3293.html">book</a> I <a rel="nofollow" title="My blog about it" target="_blank" href="http://janmaterne.wordpress.com/2010/11/08/hudson-review-and-ideas/">reviewed</a>: it is now in the press and if you order it (e.g. at <a rel="nofollow" title="Order at Amazon" target="_blank" href="http://www.amazon.de/gp/product/3898646904/">Amazon</a>), you should be able to read it by Xmas <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley'/>  (if you can read German :-O )</p>
<p><a rel="nofollow" target="_blank" href="http://janmaterne.files.wordpress.com/2010/11/32931.jpg"><img class="aligncenter size-full wp-image-297" title="Cover &quot;Continuous Integration mit Hudson&quot; by Simon Wiest" src="http://janmaterne.files.wordpress.com/2010/11/32931.jpg?w=450" alt=""/></a></p>
<br />  <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gocomments/janmaterne.wordpress.com/304/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/janmaterne.wordpress.com/304/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godelicious/janmaterne.wordpress.com/304/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/janmaterne.wordpress.com/304/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gofacebook/janmaterne.wordpress.com/304/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/janmaterne.wordpress.com/304/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gotwitter/janmaterne.wordpress.com/304/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/janmaterne.wordpress.com/304/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gostumble/janmaterne.wordpress.com/304/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/janmaterne.wordpress.com/304/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godigg/janmaterne.wordpress.com/304/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/janmaterne.wordpress.com/304/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/goreddit/janmaterne.wordpress.com/304/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/janmaterne.wordpress.com/304/"/></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=janmaterne.wordpress.com&amp;blog=544265&amp;post=304&amp;subd=janmaterne&amp;ref=&amp;feed=1" width="1" height="1"/>]]></content:encoded>
         <media:content medium="image" url="http://0.gravatar.com/avatar/e965379db91e0faa68ee5c211e49118c?s=96&amp;amp;d=identicon&amp;amp;r=G">
            <media:title type="html">janmaterne</media:title>
         </media:content>
         <media:content medium="image" url="http://janmaterne.files.wordpress.com/2010/11/32931.jpg">
            <media:title type="html">Cover "Continuous Integration mit Hudson" by Simon Wiest</media:title>
         </media:content>
      </item>
      <item>
         <title>Hudson: Review and ideas</title>
         <link>http://janmaterne.wordpress.com/2010/11/08/hudson-review-and-ideas/</link>
         <description>In June I had the pleasure to do a review of the first German book about CI with Hudson by Simon Wiest. The book is announced for December 2010 and it will cover topics from basic (setup, first jobs) up to deep knowledge like writing plugins for Hudson. As with earlier reviews I had printed [...]&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=janmaterne.wordpress.com&amp;amp;blog=544265&amp;amp;post=295&amp;amp;subd=janmaterne&amp;amp;ref=&amp;amp;feed=1" width="1" height="1"/&gt;</description>
         <guid isPermaLink="false">http://janmaterne.wordpress.com/?p=295</guid>
         <pubDate>Sun, 07 Nov 2010 22:01:29 +0000</pubDate>
         <content:encoded><![CDATA[<p>In June I had the pleasure to do a review of the first German book about <a rel="nofollow" target="_blank" href="http://www.dpunkt.de/buecher/3293.html">CI with Hudson</a> by <a rel="nofollow" target="_blank" href="http://www.simonwiest.de/">Simon Wiest</a>. The book is announced for December 2010 and it will cover topics from basic (setup, first jobs) up to deep knowledge like writing plugins for Hudson.<a rel="nofollow" target="_blank" href="http://janmaterne.files.wordpress.com/2010/11/32931.jpg"><img class="aligncenter size-full wp-image-297" title="Cover &quot;Continuous Integration mit Hudson&quot; by Simon Wiest" src="http://janmaterne.files.wordpress.com/2010/11/32931.jpg?w=450" alt=""/></a></p>
<p>As with earlier reviews I had printed the book (draft), read it and made comments on the side (and Simon had to listen to them for hours <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley'/> </p>
<p>But some comments weren&#8217;t for the author &#8211; they &#8222;just&#8220; ideas which came into my mind. But because I won&#8217;t have the time for implementing them, I&#8217;ll write about them &#8230;</p>
<h1>Capability Plugin</h1>
<p>The main idea is automatic dispatching of jobs to slaves according to their needs. If I remember right, TeamCity has this feature too &#8230;</p>
<h2>The Slaves</h2>
<p>The slaves have some capabilities. There are two kinds of them:</p>
<ol>
<li>automatic capabilities: result from tool configuration, operating system, jdk versions, build tool name+version, &#8230;</li>
<li>manual capabilities: the admin of the slave can define key-value pairs</li>
</ol>
<h2>The Jobs</h2>
<p>For jobs you define requirements according to the provided capabilities. And like them there are two requirements:</p>
<ol>
<li>automatic requirements: selected jdk, build tool, operating system (if you use e.g. a Windows Batch &#8230;)</li>
<li>manual requirement: define additional requirements (or overwrite the complete formula). Use key=value (aspectj.available=true) or comparisons (ant.version &gt;= 1.8) and combine them (and, or, xor, &#8230;)</li>
</ol>
<h2>Dispatcher strategy</h2>
<p>The dispatcher must select all slaves which fit the defined requirements. From this list it selects the one by looking at the build queue of the slave (does it have time for building?) and net-response-time (don&#8217;t forget that much data has to be transfered &#8230;)</p>
<p>&nbsp;</p>
<p>Not sure if there is something like this now &#8230;. <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley'/> </p>
<br />  <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gocomments/janmaterne.wordpress.com/295/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/janmaterne.wordpress.com/295/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godelicious/janmaterne.wordpress.com/295/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/janmaterne.wordpress.com/295/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gofacebook/janmaterne.wordpress.com/295/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/janmaterne.wordpress.com/295/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gotwitter/janmaterne.wordpress.com/295/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/janmaterne.wordpress.com/295/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gostumble/janmaterne.wordpress.com/295/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/janmaterne.wordpress.com/295/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godigg/janmaterne.wordpress.com/295/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/janmaterne.wordpress.com/295/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/goreddit/janmaterne.wordpress.com/295/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/janmaterne.wordpress.com/295/"/></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=janmaterne.wordpress.com&amp;blog=544265&amp;post=295&amp;subd=janmaterne&amp;ref=&amp;feed=1" width="1" height="1"/>]]></content:encoded>
         <media:content medium="image" url="http://0.gravatar.com/avatar/e965379db91e0faa68ee5c211e49118c?s=96&amp;amp;d=identicon&amp;amp;r=G">
            <media:title type="html">janmaterne</media:title>
         </media:content>
         <media:content medium="image" url="http://janmaterne.files.wordpress.com/2010/11/32931.jpg">
            <media:title type="html">Cover "Continuous Integration mit Hudson" by Simon Wiest</media:title>
         </media:content>
      </item>
      <item>
         <title>Hash tags in Commit Comments</title>
         <link>http://jlorenzen.blogspot.com/2010/08/hash-tags-in-commit-comments.html</link>
         <description>I've been using Yammer, Twitter, and Facebook consistently for awhile now. One of the things I really like are hash tags, where yams or tweets include additional meta information in the comment such as #groovy, #hudson, or #maven. One of the main purposes of hash tags, is it allows others to subscribe to an area of interest verses subscribing to hundreds of individual people. Another purpose it serves, is determining interest value; sort of like a subject heading. Since hash tags are typically at the end of a tweet or yam, I usually read the end first before I commit to reading the whole yam or tweet. I don't follow a ton of people yet, but I do consume a lot of information in a day and in order to find the good I have to wade through the bad. Using hash tags aides in this process.&lt;br /&gt;&lt;br /&gt;I also think hash tags could help in another area: commit comments. It's something important I've &lt;a rel="nofollow" target="_blank" href="http://jlorenzen.blogspot.com/2010/02/commit-comments-conversation-with-your.html"&gt;mentioned&lt;/a&gt; before, and I think hash tags can be useful in commit comments even if there aren't any tools yet to mash it up. A few days ago, our of habit I accidentally started including some high level hash tags in an svn commit comment and it occurred to me that it might be useful to others, if not myself in 6 months. If we find hash tags useful in yams and tweets, why not commit comments?&lt;br /&gt;&lt;br /&gt;Including tokens in commit comments isn't new. In fact, we already include a Jira number in most of our commit comments and this allows us to view all the commits for a Jira issue. There is even a &lt;a rel="nofollow" target="_blank" href="http://blogs.atlassian.com/developer/2009/10/dragon_slayer_supplement_action_issues_with_commit_commands.html"&gt;Jira plugin&lt;/a&gt; that allows you to perform actions by specifying hashes in commit comments. For example, if I want to resolve a Jira I can include #resolve in my commit comment, and Jira will automatically Resolve that Jira. And don't feel like you can't include the #resolve tag only if your using that jira plugin. I could see value in seeing a #resolve tag in the final commit of a Jira.&lt;br /&gt;&lt;br /&gt;As an example, here is the exact commit comment I used that includes some hash tags for geoserver and installer.&lt;br /&gt;&lt;br /&gt;"&lt;i&gt;Jira: AC-4207. Got the filtered geowebcache.xml file correctly moved to the production and staging data directories. These files point to localhost with the correct geo port and stage geo port. Also commented out some fixpath.cmd lines to get the installer to work. Finally, I also change the ProcessPanel to not have a condition:  changed to . This should allow us to be really selective in what we install and still allow the process panel to run, whereas before it wasn't running. #geoserver #installer&lt;/i&gt; "&lt;br /&gt;&lt;br /&gt;Now the really cool part is if someone else in the near future notices an issue with geoserver in our installer, this comment will stick out more than a comment without those hashes.&lt;br /&gt;&lt;br /&gt;Another cool thing that could be done is a team subscribing to certain hash tags in the svn commit emails. For example, someone responsible for peer reviewing all DAO changes could subscribe to a hash like #dao. Then when developers are modifying DAO's all they need to do is include the #dao tag.&lt;br /&gt;&lt;br /&gt;I guess what I am saying is perhaps we could also benefit from putting extra hash tags in our commit comments. My brain has already been trained to read them so personally I think it's useful.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1280619439915049383-8937840818543986?l=jlorenzen.blogspot.com' alt=''/&gt;&lt;/div&gt;</description>
         <author>jlorenzen</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-1280619439915049383.post-8937840818543986</guid>
         <pubDate>Sat, 14 Aug 2010 23:20:00 +0000</pubDate>
      </item>
      <item>
         <title>Another Admin job Hudson: ensure that there are not too many old builds …</title>
         <link>http://janmaterne.wordpress.com/2010/08/14/another-admin-job-hudson-ensure-that-there-are-not-too-many-old-builds/</link>
         <description>Especially if you have a large number of jobs and they are running more often, you&amp;#8217;ll come to a point, where your disk is full of old builds. Hudson provides a configuration parameter for that: &amp;#8222;discard old builds&amp;#8220;. This will delete old builds according to the specified number of days or number of builds. For [...]&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=janmaterne.wordpress.com&amp;amp;blog=544265&amp;amp;post=288&amp;amp;subd=janmaterne&amp;amp;ref=&amp;amp;feed=1" width="1" height="1"/&gt;</description>
         <guid isPermaLink="false">http://janmaterne.wordpress.com/?p=288</guid>
         <pubDate>Sat, 14 Aug 2010 12:56:13 +0000</pubDate>
         <content:encoded><![CDATA[<p>Especially if you have a large number of jobs and they are running more often, you&#8217;ll come to a point, where your disk is full of old builds.</p>
<p>Hudson provides a configuration parameter for that: &#8222;discard old builds&#8220;. This will delete old builds according to the specified number of days or number of builds.</p>
<p style="text-align:center;"><a rel="nofollow" target="_blank" href="http://janmaterne.files.wordpress.com/2010/08/hudson1.jpg"><img class="aligncenter size-full wp-image-289" title="hudson1" src="http://janmaterne.files.wordpress.com/2010/08/hudson1.jpg?w=450" alt=""/></a></p>
<p>For Apache I wrote a script which ensures, that all jobs have &#8222;discard&#8220; setting and that existing values are not higher than a defined maximum value.</p>
<p><a rel="nofollow" target="_blank" href="http://janmaterne.files.wordpress.com/2010/08/hudson2.jpg"><img class="aligncenter size-full wp-image-290" title="hudson2" src="http://janmaterne.files.wordpress.com/2010/08/hudson2.jpg?w=450&#038;h=146" alt="" width="450" height="146"/></a></p>
<p><pre>

/** Default-Setting for the &quot;number of old builds&quot; */
numberOfOldBuilds  = 10

/** Maximum of &quot;number of days&quot; */
maxDaysOfOldBuilds = 14

/** Should we override existing values? */
overrideExistingValues = true

/** Closures for setting default 'max number' */
setMaxNum = { job -&gt;
   job.logRotator = new hudson.tasks.LogRotator(-1, numberOfOldBuilds)
}

/** Closures for setting default 'max number' */
setMaxDays = { job -&gt;
 job.logRotator = new hudson.tasks.LogRotator(maxDaysOfOldBuilds, -1)
}

// ----- Do the work. -----

// Access to the Hudson Singleton
hudsonInstance = hudson.model.Hudson.instance

// Retrieve all active Jobs
allItems = hudsonInstance.items
activeJobs = allItems.findAll{job -&gt; job.isBuildable()}

// Table header
col1 = &quot;Old&quot;.center(10)
col2 = &quot;New&quot;.center(10)
col3 = &quot;Job&quot;.center(50)
col4 = &quot;Action&quot;.center(14)
header = &quot;$col1 | $col2 | $col3 | $col4&quot;
line = header.replaceAll(&quot;[^|]&quot;, &quot;-&quot;).replaceAll(&quot;&#92;&#92;|&quot;, &quot;+&quot;)
title = &quot;Set 'Discard old builds'&quot;.center(line.size())

println title
println line
println header
println line

// Do work and create the result table
activeJobs.each { job -&gt;

 // Does the job have a discard setting?
 discardActive = job.logRotator != null

 // Enforce the settings
 action   = &quot;&quot;
 newValue = &quot;&quot;
 oldValue = &quot;&quot;
 if (!discardActive) {
 // No discard settings, so set the default
 setMaxNum.call(job)
 action   = &quot;established&quot;
 newValue = &quot;$numberOfOldBuilds jobs&quot;
 } else {
 // What are the current settings?
 oldDays = job.logRotator.daysToKeep
 oldNums    = job.logRotator.numToKeep

 if (oldNums &gt; 0) {
 // We have a set value for 'numbers'
 if (oldNums &gt; numberOfOldBuilds &amp;&amp; overrideExistingValues) {
 // value is too large so set a new one
 setMaxNum.call(job)
 action   = &quot;updated&quot;
 newValue = &quot;$numberOfOldBuilds jobs&quot;
 oldValue = &quot;$oldNums jobs&quot;
 } else {
 // Correct value or we arent allowed to override.
 oldValue = &quot;$oldNums jobs&quot;
 }
 } else {
 // we have a value for 'days'
 if (oldDays &gt; maxDaysOfOldBuilds &amp;&amp; overrideExistingValues) {
 // value is too large so set a new one
 setMaxDays.call(job)
 action   = &quot;updated&quot;
 newValue = &quot;$maxDaysOfOldBuilds days&quot;
 oldValue = &quot;$oldDays days&quot;
 } else {
 // Correct value or we aren't allowed to override.
 oldValue = &quot;$oldDays days&quot;
 }
 }
 }

 // String preparation for table output
 oldValue = oldValue.padLeft(10)
 newValue = newValue.padLeft(10)
 jobname  = job.name.padRight(50)

 // Table output
 println &quot;$oldValue | $newValue | $jobname | $action&quot;
}
println line

// Meaningful output on the Groovy console
// (the console will output the result of the last statement)
printout = &quot;Number of Jobs: $activeJobs.size&quot;

</pre></p>
<p>In the first section I define the &#8222;constants&#8220; (line 001-008). After that I define two closures which update a given Hudson job (line 010-018).<br />
The basic structure is the one I used in<a rel="nofollow" target="_blank" href="http://janmaterne.wordpress.com/2010/07/11/how-to-check-if-all-hudson-jobs-have-a-timeout/"> earlier scripts</a> &#8230;<br />
The work here is in lines 053-088. But that&#8217;s pretty easy: check the given values and eventually set new values using the pre defined closures.<br />
New is the last line: I dont use a &gt;x = &#8222;&#8220;&lt; instruction for suppressing the output. I use a more meaningful message: the number of jobs.</p>
<br />  <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gocomments/janmaterne.wordpress.com/288/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/janmaterne.wordpress.com/288/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godelicious/janmaterne.wordpress.com/288/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/janmaterne.wordpress.com/288/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gofacebook/janmaterne.wordpress.com/288/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/janmaterne.wordpress.com/288/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gotwitter/janmaterne.wordpress.com/288/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/janmaterne.wordpress.com/288/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gostumble/janmaterne.wordpress.com/288/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/janmaterne.wordpress.com/288/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godigg/janmaterne.wordpress.com/288/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/janmaterne.wordpress.com/288/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/goreddit/janmaterne.wordpress.com/288/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/janmaterne.wordpress.com/288/"/></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=janmaterne.wordpress.com&amp;blog=544265&amp;post=288&amp;subd=janmaterne&amp;ref=&amp;feed=1" width="1" height="1"/>]]></content:encoded>
         <media:content medium="image" url="http://0.gravatar.com/avatar/e965379db91e0faa68ee5c211e49118c?s=96&amp;amp;d=identicon&amp;amp;r=G">
            <media:title type="html">janmaterne</media:title>
         </media:content>
         <media:content medium="image" url="http://janmaterne.files.wordpress.com/2010/08/hudson1.jpg">
            <media:title type="html">hudson1</media:title>
         </media:content>
         <media:content medium="image" url="http://janmaterne.files.wordpress.com/2010/08/hudson2.jpg">
            <media:title type="html">hudson2</media:title>
         </media:content>
      </item>
      <item>
         <title>POTD: bridge method injector</title>
         <link>http://www.java.net/blog/kohsuke/archive/2010/08/07/potd-bridge-method-injector</link>
         <description>&lt;p style="color:gray;"&gt;(I started cross-posting blogs to &lt;a rel="nofollow" target="_blank" href="http://kohsuke.org/2010/08/07/potd-bridge-method-injector/"&gt;my own website&lt;/a&gt;.)

&lt;p&gt;
I was working on Hudson yesterday which led me to develop this little tool called &lt;a rel="nofollow" target="_blank" href="http://bridge-method-injector.infradna.com/"&gt;Bridge method injector&lt;/a&gt;.

&lt;p&gt;
When you are writing a library, there are various restrictions about the kind of changes you can make, in order to maintain binary compatibility.

&lt;p&gt;
One such restriction is an inability to restrict the return type. Say in v1 of your library you had the following code:

&lt;pre&gt;
public Foo getFoo() {
    return new Foo();
}
&lt;/pre&gt;

&lt;p&gt;
In v2, say if you introduce a subtype of  called &lt;tt&gt;FooSubType&lt;/tt&gt;, and you want to change the &lt;tt&gt;getFoo&lt;/tt&gt; method to return &lt;tt&gt;FooSubType&lt;/tt&gt;.

&lt;pre&gt;
public FooSubType getFoo() {
    return new FooSubType();
}
&lt;/pre&gt;

&lt;p&gt;
But if you do this, you break the binary compatibility. The clients need to be recompiled to be able to work with the new signature. This is where this bridge method injector can help. By adding an annotation like the following:

&lt;pre&gt;
@WithBridgeMethods(Foo.class)
public FooSubType getFoo() {
    return new FooSubType();
}
&lt;/pre&gt;
&lt;p&gt;
... and running the bytecode post processor, your class file will get the additional "bridge methods." In pseudo-code, it'll look like this:

&lt;pre&gt;
// your original definition
@WithBridgeMethods(Foo.class)
public FooSubType getFoo() {
    return new FooSubType();
}

// added bridge method
public Foo getFoo() {
    invokevirtual this.getFoo()LFooSubType;
    areturn
}
&lt;/pre&gt;

&lt;p&gt;
Such code isn't allowed in Java source files, but class files allow that. With this addition, existing clients will continue to function.

&lt;p&gt;
In this way, you can evolve your classes more easily without breaking backward compatibility.

&lt;p&gt;
For more about how to use it in your Maven project, &lt;a rel="nofollow" target="_blank" href="http://bridge-method-injector.infradna.com/"&gt;the project website&lt;/a&gt;.</description>
         <guid isPermaLink="false">461096 at http://www.java.net</guid>
         <pubDate>Sat, 07 Aug 2010 18:10:23 +0000</pubDate>
      </item>
      <item>
         <title>Links for 2010-07-20</title>
         <link>http://janmaterne.wordpress.com/2010/07/20/links-for-2010-07-20/</link>
         <description>According to Entwickler.COM Microsoft has published a free ebook about &amp;#8222;Cloud Computing&amp;#8220; by Bob Muglia. On Wakaleo the development of an open source book about Hudson: &amp;#8222;Continuous Integration with Hudson&amp;#8222;. First chapters are online &amp;#8230; Golem.DE has found a free German video workshop about Gimp 2.6. On DZone Hudson creator Kohsuke Kawaguchi introduced his new [...]&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=janmaterne.wordpress.com&amp;amp;blog=544265&amp;amp;post=266&amp;amp;subd=janmaterne&amp;amp;ref=&amp;amp;feed=1" width="1" height="1"/&gt;</description>
         <guid isPermaLink="false">http://janmaterne.wordpress.com/?p=266</guid>
         <pubDate>Tue, 20 Jul 2010 06:45:01 +0000</pubDate>
         <content:encoded><![CDATA[<p>According to <a rel="nofollow" target="_blank" href="http://entwickler.com/itr/news/psecom,id,51490,nodeid,82.html">Entwickler.COM</a> Microsoft has published a free <a rel="nofollow" target="_blank" href="https://www.microsoft.com/business/mycenter/library/cloud-computing.aspx">ebook</a> about &#8222;Cloud Computing&#8220; by Bob Muglia.</p>
<p>On Wakaleo the development of an open source book about <a rel="nofollow" target="_blank" href="http://hudson-ci.org/">Hudson</a>: &#8222;<a rel="nofollow" target="_blank" href="http://www.wakaleo.com/books/continuous-integration-with-hudson-the-book">Continuous Integration with Hudson</a>&#8222;. First chapters are online &#8230;</p>
<p><a rel="nofollow" target="_blank" href="http://www.golem.de/1004/74825.html">Golem.DE</a> has found a free German <a rel="nofollow" target="_blank" href="http://download.galileo-press.de/trailer/97/system/lesson.htm">video workshop</a> about <a rel="nofollow" target="_blank" href="http://www.gimp.org/">Gimp</a> 2.6.</p>
<p>On <a rel="nofollow" target="_blank" href="http://java.dzone.com/articles/kohsuke-kawaguchi-talks-hudson">DZone</a> Hudson creator Kohsuke Kawaguchi introduced his new startup, <a rel="nofollow" target="_blank" href="http://infradna.com/">InfraDNA</a>, which provides support and consulting for the <a rel="nofollow" target="_blank" href="http://hudson-ci.org/">Hudson</a> <a rel="nofollow" target="_blank" href="http://martinfowler.com/articles/continuousIntegration.html">Continuous Integration</a> system.</p>
<p>Again on <a rel="nofollow" target="_blank" href="http://java.dzone.com/articles/htmlunit-%E2%80%93-quick-introduction?utm_source=feedburner&amp;utm_medium=feed&amp;utm_campaign=Feed%3A+javalobby%2Ffrontpage+(Javalobby+%2F+Java+Zone">DZone</a> there is a nice introduction into <a rel="nofollow" target="_blank" href="http://htmlunit.sourceforge.net/">HtmlUnit</a>. It provides a Java based WebClient which you can control via its API. With this you could write <a rel="nofollow" target="_blank" href="http://www.junit.org/">JUnit</a> tests. But more easily you could write them with the additional assert-Methods:<br />
<pre>
@Test
public void testGoogle(){
 WebClient webClient = new WebClient();
 HtmlPage currentPage = webClient.getPage(&quot;http://www.google.com/&quot;);
 assertEquals(&quot;Google&quot;, currentPage.getTitleText());
}
@Test public void htmlunitAsserts() {
 // Load a page
 webClient.getPage(&quot;http://www.google.com/search?q=htmlunit&quot;);

 // JUnit asserts and WebClient API
 assertEquals(200,currentPage.getWebResponse().getStatusCode());
 assertEquals(&quot;OK&quot;,currentPage.getWebResponse().getStatusMessage());

 // HtmlUnit asserts
 WebAssert.assertTextPresent(currentPage, &quot;htmlunit&quot;);
 WebAssert.assertTitleContains(currentPage, &quot;htmlunit&quot;);
 WebAssert.assertLinkPresentWithText(currentPage, &quot;Advanced search&quot;);

 // XPath Query
 assertTrue(currentPage.getByXPath(&quot;//h3&quot;).size()&gt;0); //result number

 // Cookies
 assertNotNull(webClient.getCookieManager().getCookie(&quot;NID&quot;));
}
</pre></p>
<p>According to <a rel="nofollow" target="_blank" href="http://entwickler.com/itr/news/psecom,id,54228,nodeid,82.html">Entwickler.COM</a> <a rel="nofollow" target="_blank" href="http://www.microsoft.com">Microsoft</a> has published a bunch of <a rel="nofollow" target="_blank" href="http://office.microsoft.com/en-us/powerpoint-help/free-professionally-designed-templates-for-powerpoint-2010-HA010359443.aspx">Powerpoint-Templates</a> for demonstrating the new features of PPT 2010.</p>
<p>If you ask yourself what Darth Vader and Yoda are doing after making the movies with George Lucas, <a rel="nofollow" target="_blank" href="http://www.golem.de/1007/76388.html">GolemDE</a> has found the answer: they are creating TomToms next voices &#8230; <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley'/> </p>
<p>If you are updating to <a rel="nofollow" target="_blank" href="http://java.sun.com/javase/6/webnotes/6u21.html">Java 1.6_21</a> and having problems with Eclipse, have a look at this <a rel="nofollow" target="_blank" href="http://aniefer.blogspot.com/2010/07/permgen-problems-and-running-eclipse-on.html">blog</a> entry: it show how to tune the JVM settings &#8230;</p>
<p>Also if you write JPA applications you should have a good test suite. So looking at the blog &#8222;<a rel="nofollow" target="_blank" href="http://greensopinion.blogspot.com/2010/07/patterns-for-better-unit-testing-with.html">Patterns for Better Unit Testing with JPA</a>&#8220; is not waste of time <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley'/> </p>
<br />  <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gocomments/janmaterne.wordpress.com/266/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/janmaterne.wordpress.com/266/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godelicious/janmaterne.wordpress.com/266/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/janmaterne.wordpress.com/266/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gofacebook/janmaterne.wordpress.com/266/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/janmaterne.wordpress.com/266/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gotwitter/janmaterne.wordpress.com/266/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/janmaterne.wordpress.com/266/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gostumble/janmaterne.wordpress.com/266/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/janmaterne.wordpress.com/266/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godigg/janmaterne.wordpress.com/266/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/janmaterne.wordpress.com/266/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/goreddit/janmaterne.wordpress.com/266/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/janmaterne.wordpress.com/266/"/></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=janmaterne.wordpress.com&amp;blog=544265&amp;post=266&amp;subd=janmaterne&amp;ref=&amp;feed=1" width="1" height="1"/>]]></content:encoded>
         <media:content medium="image" url="http://0.gravatar.com/avatar/e965379db91e0faa68ee5c211e49118c?s=96&amp;amp;d=identicon&amp;amp;r=G">
            <media:title type="html">janmaterne</media:title>
         </media:content>
      </item>
      <item>
         <title>Hudson: Overview of the suggestd timeout settings</title>
         <link>http://janmaterne.wordpress.com/2010/07/13/hudson-overview-of-the-suggestd-timeout-settings/</link>
         <description>In my last post I explained why and how to check the timeout settings for Hudson jobs. On our mailinglist for Hudson users at Apache there was a suggestion to get an overview of (computed) suggested timeout settings. So here is the follow up to my earlier code &amp;#8230; The new stuff is only the [...]&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=janmaterne.wordpress.com&amp;amp;blog=544265&amp;amp;post=255&amp;amp;subd=janmaterne&amp;amp;ref=&amp;amp;feed=1" width="1" height="1"/&gt;</description>
         <guid isPermaLink="false">http://janmaterne.wordpress.com/?p=255</guid>
         <pubDate>Tue, 13 Jul 2010 14:58:59 +0000</pubDate>
         <content:encoded><![CDATA[<p>In my<a rel="nofollow" target="_blank" href="http://janmaterne.wordpress.com/2010/07/11/how-to-check-if-all-hudson-jobs-have-a-timeout"> last post</a> I explained why and how to check the timeout settings for Hudson jobs.</p>
<p>On our mailinglist for Hudson users at Apache there was a suggestion to get an overview of (computed) suggested timeout settings.</p>
<p>So here is the follow up to my earlier code &#8230;</p>
<p><pre>
hudsonInstance = hudson.model.Hudson.instance&lt;/pre&gt;
allItems = hudsonInstance.items
activeJobs = allItems.findAll{job -&gt; job.isBuildable()}
wrappableJobs = activeJobs.findAll{job -&gt; job instanceof hudson.model.BuildableItemWithBuildWrappers}

jobsWithoutTimeout = wrappableJobs.findAll { job -&gt;
 job.getBuildWrappersList().findAll{it instanceof hudson.plugins.build_timeout.BuildTimeoutWrapper }[0] == null
}

println &quot;Suggested timeout values for jobs without any ($jobsWithoutTimeout.size in total):&quot;
jobsWithoutTimeout.each { job -&gt;
 defaultTimeout = Math.round(job.estimatedDuration * 2 / 1000 / 60)
 if (defaultTimeout &lt; 10) defaultTimeout = 10
 String s = defaultTimeout
 s = s.padLeft(4)
 println &quot;$s | $job.name&quot;
}

x = &quot;&quot;

</pre></p>
<p>The new stuff is only the creation in the last few lines. Nothing special &#8211; apart from the conversion from Long to String for getting padLeft() work <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley'/> </p>
<p>The result is a &#8222;table&#8220; like this:</p>
<p><a rel="nofollow" target="_blank" href="http://janmaterne.files.wordpress.com/2010/07/timout.jpg"><img class="aligncenter size-medium wp-image-257" title="Suggestion of Timeout values per Job" src="http://janmaterne.files.wordpress.com/2010/07/timout.jpg?w=526&#038;h=497" alt="Suggestion of Timeout values per Job" width="526" height="497"/></a></p>
<br />  <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gocomments/janmaterne.wordpress.com/255/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/janmaterne.wordpress.com/255/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godelicious/janmaterne.wordpress.com/255/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/janmaterne.wordpress.com/255/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gofacebook/janmaterne.wordpress.com/255/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/janmaterne.wordpress.com/255/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gotwitter/janmaterne.wordpress.com/255/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/janmaterne.wordpress.com/255/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gostumble/janmaterne.wordpress.com/255/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/janmaterne.wordpress.com/255/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godigg/janmaterne.wordpress.com/255/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/janmaterne.wordpress.com/255/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/goreddit/janmaterne.wordpress.com/255/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/janmaterne.wordpress.com/255/"/></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=janmaterne.wordpress.com&amp;blog=544265&amp;post=255&amp;subd=janmaterne&amp;ref=&amp;feed=1" width="1" height="1"/>]]></content:encoded>
         <media:content medium="image" url="http://0.gravatar.com/avatar/e965379db91e0faa68ee5c211e49118c?s=96&amp;amp;d=identicon&amp;amp;r=G">
            <media:title type="html">janmaterne</media:title>
         </media:content>
         <media:content medium="image" url="http://janmaterne.files.wordpress.com/2010/07/timout.jpg?w=300">
            <media:title type="html">Suggestion of Timeout values per Job</media:title>
         </media:content>
      </item>
      <item>
         <title>How to check if all Hudson jobs have a timeout?</title>
         <link>http://janmaterne.wordpress.com/2010/07/11/how-to-check-if-all-hudson-jobs-have-a-timeout/</link>
         <description>At Apaches Hudson installation I have sometimes seen the situation where too many builds are stuck and therefore blocking the executors. And sadly for me &amp;#8211; the executors my own jobs require &amp;#8230; Having a policy to use the &amp;#8222;build timeout plugin&amp;#8220; and kill jobs which are running too long (thinking more of &amp;#8222;not running [...]&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=janmaterne.wordpress.com&amp;amp;blog=544265&amp;amp;post=247&amp;amp;subd=janmaterne&amp;amp;ref=&amp;amp;feed=1" width="1" height="1"/&gt;</description>
         <guid isPermaLink="false">http://janmaterne.wordpress.com/?p=247</guid>
         <pubDate>Sun, 11 Jul 2010 13:18:18 +0000</pubDate>
         <content:encoded><![CDATA[<p>At Apaches <a rel="nofollow" target="_blank" href="http://hudson-ci.org/">Hudson</a> <a rel="nofollow" target="_blank" href="http://hudson.zones.apache.org">installation</a> I have sometimes seen the situation where too many builds are stuck and therefore blocking the executors. And sadly for me &#8211; the executors my own jobs require &#8230;</p>
<p>Having a policy to use the &#8222;<a rel="nofollow" target="_blank" href="http://wiki.hudson-ci.org/display/HUDSON/Build-timeout+Plugin">build timeout plugin</a>&#8220; and kill jobs which are running too long (thinking more of &#8222;not running any more&#8220; <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley'/>  is good. But having a program which checks this is better &#8230;</p>
<p>So I tried a little bit Groovy&#8217;in for the Groovy console:</p>
<p><pre>
hudsonInstance = hudson.model.Hudson.instance
allItems = hudsonInstance.items
activeJobs = allItems.findAll{job -&gt; job.isBuildable()}
wrappableJobs = activeJobs.findAll{job -&gt; job instanceof hudson.model.BuildableItemWithBuildWrappers}

jobsWithoutTimeout = wrappableJobs.findAll { job -&gt;
 job.getBuildWrappersList().findAll{it instanceof hudson.plugins.build_timeout.BuildTimeoutWrapper }[0] == null
}

println &quot;There are $jobsWithoutTimeout.size jobs without timeout:&quot;
jobsWithoutTimeout.each { println &quot;- $it.name&quot; }

x = &quot;&quot;
</pre></p>
<p>In line 1 we get the reference to the Hudson singleton. Then we get the list of all item in line 2 which we filter in line 3 to get only buildable items, like our jobs. The line 4 contains the first thing special to this requirement: the item must be able to have a BuildWrapper.</p>
<p>But the most thing is done in line 5 which filters again with a closure: get all BuildWrappers for the job, but only if it is our TimeOut-Plugin. Because it can be registered only once, I check the first element of that list. It must be null for being a problem. Otherwise the job has a timeout setting.</p>
<p>After that, the last two lines are simply out &#8230; and the last line supresses the result output in the console.</p>
<p><span style="text-decoration:underline;"><strong>Update:</strong></span></p>
<p><a rel="nofollow" target="_blank" href="http://www.lunar-ocean.com/">Antoine Tulme</a> had consulted <a rel="nofollow" target="_blank" href="http://www.kohsuke.org/">Kohsuke Kawaguchi</a> and he sees three possibilities of forcing the timeout setting:</p>
<ol>
<li>We cannot make the timeout field mandatory.</li>
<li>We can create a plugin that presets the timeout field.</li>
<li>We can iterate over the projects and set a value for the timeouts en masse.</li>
</ol>
<p>Good, so I evaluate my &#8222;iteration solution&#8220; a little more.</p>
<p>We have a list of all jobs without settings and so we only have to iterate over this list, instantiate and initialize the BuildTimeoutWrapper and add it to the jobs wrapper-list:</p>
<p><pre>
jobsWithoutTimeout.each { job -&gt;
 defaultTimeout = 180
 defaultFailBuild = false
 plugin = new hudson.plugins.build_timeout.BuildTimeoutWrapper(defaultTimeout, defaultFailBuild)
 job.getBuildWrappersList().add(plugin)
}

</pre></p>
<p>BTW &#8211; If you want to work with a plugin, you could start with the <a rel="nofollow" target="_blank" href="http://wiki.hudson-ci.org/display/HUDSON/Create+Job+Advanced+Plugin">Create Job Advances Plugin</a> &#8211; maybe this requires code enhancement &#8230; and it will only for future jobs, not for existing one.</p>
<p><span style="text-decoration:underline;"><strong>Update:</strong></span></p>
<p>The last update of the script for setting the timeout value is this:</p>
<p><pre>

hudsonInstance = hudson.model.Hudson.instance
allItems = hudsonInstance.items
activeJobs = allItems.findAll{job -&gt; job.isBuildable()}
defaultFailBuild = true

println &quot;Cur   |  Est  | Name&quot;
activeJobs.each { job -&gt;
 // Get the Timeout-PlugIn
 wrapper = job.getBuildWrappersList().findAll{it instanceof hudson.plugins.build_timeout.BuildTimeoutWrapper }[0]

 // Get the current Timeout, if any
 currentTimeout = (wrapper != null) ? wrapper.timeoutMinutes : &quot;&quot;

 // Calculate a new timeout with a min-value
 defaultTimeout = Math.round(job.estimatedDuration * 2 / 1000 / 60)
 if (defaultTimeout &lt; 10) defaultTimeout = 10

 // Update the timeout, maybe requires instantiation
 action = (wrapper != null) ? &quot;updated&quot; : &quot;established&quot;
 if (wrapper == null) {
 plugin = new hudson.plugins.build_timeout.BuildTimeoutWrapper(defaultTimeout, defaultFailBuild)
 job.getBuildWrappersList().add(plugin)
 } else {
 wrapper.timeoutMinutes = defaultTimeout
 }

 // String preparation for table output
 String defaultTimeoutStr = defaultTimeout
 defaultTimeoutStr = defaultTimeoutStr.padLeft(5)
 String currentTimeoutStr = currentTimeout
 currentTimeoutStr = currentTimeoutStr.padLeft(5)
 String jobname = job.name.padRight(40)

 // Table output
 println &quot;$currentTimeoutStr | $defaultTimeoutStr | $jobname | $action &quot;
}

x = &quot;&quot;

</pre></p>
<p>This updates all timeout settings and reports this like here:</p>
<p><a rel="nofollow" target="_blank" href="http://janmaterne.files.wordpress.com/2010/07/timout21.jpg"><img class="aligncenter size-full wp-image-264" title="Report of Timout-Setter" src="http://janmaterne.files.wordpress.com/2010/07/timout21.jpg?w=450&#038;h=137" alt="Report of Timout-Setter" width="450" height="137"/></a></p>
<br />  <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gocomments/janmaterne.wordpress.com/247/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/janmaterne.wordpress.com/247/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godelicious/janmaterne.wordpress.com/247/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/janmaterne.wordpress.com/247/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gofacebook/janmaterne.wordpress.com/247/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/janmaterne.wordpress.com/247/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gotwitter/janmaterne.wordpress.com/247/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/janmaterne.wordpress.com/247/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gostumble/janmaterne.wordpress.com/247/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/janmaterne.wordpress.com/247/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godigg/janmaterne.wordpress.com/247/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/janmaterne.wordpress.com/247/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/goreddit/janmaterne.wordpress.com/247/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/janmaterne.wordpress.com/247/"/></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=janmaterne.wordpress.com&amp;blog=544265&amp;post=247&amp;subd=janmaterne&amp;ref=&amp;feed=1" width="1" height="1"/>]]></content:encoded>
         <media:content medium="image" url="http://0.gravatar.com/avatar/e965379db91e0faa68ee5c211e49118c?s=96&amp;amp;d=identicon&amp;amp;r=G">
            <media:title type="html">janmaterne</media:title>
         </media:content>
         <media:content medium="image" url="http://janmaterne.files.wordpress.com/2010/07/timout21.jpg">
            <media:title type="html">Report of Timout-Setter</media:title>
         </media:content>
      </item>
      <item>
         <title>Keeping Hudson configuration and data in SVN</title>
         <link>http://javaadventure.blogspot.com/2010/07/keeping-hudson-configuration-and-data.html</link>
         <description>We recently lost our hudson server due to a multiple disk failure in the RAID array storing our hudson configuration. [5 of the 15 disks died]&lt;br /&gt;&lt;br /&gt;So I've been looking into a backup script that will allow us to keep a backup of the configuration.&amp;nbsp; We use Maven for most of our builds, so the released artifacts are in our Maven Repository (which is hosted on two servers each with RAID arrays and using DRBD to mirror between the pair, with an rsync to a NAS in another cabinet and we are trying to get an rsych to an off-site storage going as well).&lt;br /&gt;&lt;br /&gt;There seem to be two main options:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Use the &lt;a rel="nofollow" target="_blank" href="http://wiki.hudson-ci.org/display/HUDSON/Backup+Plugin?showComments=false"&gt;Hudson Backup Plugin&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Backup your Hudson configuration to Source Control.&amp;nbsp;&lt;/li&gt;&lt;/ol&gt;Option 1 is nice, but you still have to copy off the backup files and find  some safe place to store them.&amp;nbsp; Option 2 sounds better to me as if we loose our source control system, we'll there's nothing to build anyway!&lt;br /&gt;&lt;br /&gt;So a quick search of the interwebs revealed &lt;a rel="nofollow" target="_blank" href="http://eng.genius.com/blog/2010/02/02/hudson-in-svn/"&gt;Mike Rooney&lt;/a&gt; has been here before... cool... I have somewhere to start... with a few tweaks I have ended up with the following:&lt;br /&gt;&lt;div style="margin-left:40px;"&gt;&lt;span style="font-size:xx-small;"&gt;&lt;span style="font-family:courier new, monospace;"&gt;#!/bin/bash&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:xx-small;"&gt;&lt;span style="font-family:courier new, monospace;"&gt;if [[ ! -d $HUDSON_HOME ]]&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:xx-small;"&gt;&lt;span style="font-family:courier new, monospace;"&gt;then&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:xx-small;"&gt;&lt;span style="font-family:courier new, monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; echo "Hudson home directory ($HUDSON_HOME) is missing or undefined"&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:xx-small;"&gt;&lt;span style="font-family:courier new, monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; exit 1&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:xx-small;"&gt;&lt;span style="font-family:courier new, monospace;"&gt;fi&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:xx-small;"&gt;&lt;span style="font-family:courier new, monospace;"&gt;cd $HUDSON_HOME&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:xx-small;"&gt;&lt;span style="font-family:courier new, monospace;"&gt;# Add any new conf files, jobs, users, and content.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:xx-small;"&gt;&lt;span style="font-family:courier new, monospace;"&gt;svn add -q --parents *.xml jobs/*/config.xml users/*/config.xml userContent/*&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:xx-small;"&gt;&lt;span style="font-family:courier new, monospace;"&gt;# Add the names of plugins so that we know what plugins we have&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:xx-small;"&gt;&lt;span style="font-family:courier new, monospace;"&gt;ls -l plugins &amp;gt; plugins.list&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:xx-small;"&gt;&lt;span style="font-family:courier new, monospace;"&gt;svn add -q -N --parents plugins.list&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:xx-small;"&gt;&lt;span style="font-family:courier new, monospace;"&gt;# Ignore things in the root we don't care about.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:xx-small;"&gt;&lt;span style="font-family:courier new, monospace;"&gt;echo -e "war&amp;#92;nlog&amp;#92;n*.log&amp;#92;n*.tmp&amp;#92;n*.old&amp;#92;n*.bak&amp;#92;n*.jar&amp;#92;n*.json&amp;#92;nsecret.key&amp;#92;ntools&amp;#92;nshelvedProjects&amp;#92;n.owner&amp;#92;nupdates&amp;#92;nplugins" &amp;gt; myignores&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:xx-small;"&gt;&lt;span style="font-family:courier new, monospace;"&gt;svn ps -q svn:ignore -F myignores . &amp;amp;&amp;amp; rm myignores&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:xx-small;"&gt;&lt;span style="font-family:courier new, monospace;"&gt;# Ignore things in jobs/* we don't care about.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:xx-small;"&gt;&lt;span style="font-family:courier new, monospace;"&gt;echo -e "builds&amp;#92;nlast*&amp;#92;nnext*&amp;#92;n*.txt&amp;#92;n*.log&amp;#92;nworkspace*&amp;#92;ncobertura&amp;#92;njavadoc&amp;#92;nhtmlreports&amp;#92;nncover&amp;#92;ndoclinks" &amp;gt; myignores&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:xx-small;"&gt;&lt;span style="font-family:courier new, monospace;"&gt;svn ps -q svn:ignore -F myignores jobs/* &amp;amp;&amp;amp; rm myignores&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:xx-small;"&gt;&lt;span style="font-family:courier new, monospace;"&gt;# Remove anything from SVN that no longer exists in Hudson.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:xx-small;"&gt;&lt;span style="font-family:courier new, monospace;"&gt;svn st | sed -n -e "s/^&amp;#92;!//p" | xargs -r svn rm&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:xx-small;"&gt;&lt;span style="font-family:courier new, monospace;"&gt;# And finally, check in of course, showing status before and after for logging.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:xx-small;"&gt;&lt;span style="font-family:courier new, monospace;"&gt;svn st &amp;amp;&amp;amp; svn ci --non-interactive --username=hudson-build -m "automated commit of Hudson configuration" &amp;amp;&amp;amp; svn st&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;The main changes are that I've updated the root level ignores and I capture a listing of the plugins directory so that you can know exactly what plugins you had installed&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21580788-8218071183667219577?l=javaadventure.blogspot.com' alt=''/&gt;&lt;/div&gt;</description>
         <author>Stephen Connolly</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-21580788.post-8218071183667219577</guid>
         <pubDate>Thu, 08 Jul 2010 11:54:00 +0000</pubDate>
      </item>
      <item>
         <title>My Upcoming Presentations</title>
         <link>http://www.java.net/blog/kohsuke/archive/2010/06/03/my-upcoming-presentations</link>
         <description>&lt;p style="color:gray;"&gt;(I started cross-posting blogs to &lt;a rel="nofollow" target="_blank" href="http://kohsuke.org/2010/06/03/my-upcoming-presentations/"&gt;my own website&lt;/a&gt;.)&lt;/p&gt;
&lt;p&gt;I will be presenting Hudson (with a focus on its Selenium support/integration) at &lt;a rel="nofollow" target="_blank" href="http://www.meetup.com/seleniumsanfrancisco/calendar/13674328/"&gt;the upcoming San Francisco Selenium Meetup event on Jun 22nd in San Francisco&lt;/a&gt;. There are several Selenium-related plugins in Hudson, but running Selenium tests on Hudson involves some initial setup cost. I'd discuss those, plus general-purpose features in Hudson that really work well with Selenium.&lt;/p&gt;
&lt;p&gt;In the week after that, from 30th to July 3rd, I'll be in Israel, thanks to &lt;a rel="nofollow" target="_blank" href="http://jfrog.org/"&gt;JFrog&lt;/a&gt;. This is my first visit to Israel, so I'm really excited. If there are any Hudson users there who'd like to meet up, please let me know, as I'm always interested in seeing different deployments of Hudson and learn from those. Or if you are interested in having me do a short on-site work, there won't be any travel cost, so this would be a good opportunity ;-)&lt;/p&gt;
&lt;p&gt;Further down the road, I'll be speaking in JavaOne 2010. Historically we have a good number of Hudson committers/users in JavaOne, so we've been doing some get-together. I hope we can do it again, so please stay tuned as the details of the conference develops over the summer.&lt;/p&gt;</description>
         <guid isPermaLink="false">424644 at http://www.java.net</guid>
         <pubDate>Thu, 03 Jun 2010 17:05:08 +0000</pubDate>
      </item>
      <item>
         <title>How to create a release without the maven2 release plugin</title>
         <link>http://jlorenzen.blogspot.com/2010/05/how-to-create-release-without-maven2.html</link>
         <description>One of the most referenced articles I have written is "&lt;a rel="nofollow" target="_blank" href="http://jlorenzen.blogspot.com/2007/09/how-to-create-release-using-maven2.html"&gt;How to create a release using the maven release plugin&lt;/a&gt;". But what if you can't get the maven release plugin to work with your project? Perhaps like our team, you've got a legacy maven2 multi-module project that's been nigh impossible to use with the &lt;a rel="nofollow" target="_blank" href="http://maven.apache.org/plugins/maven-release-plugin/"&gt;release plugin&lt;/a&gt;. Our project has a mix of WAR modules combined with some Flex modules. I believe our last issue was some googlecode flex mojo wasn't working with the release plugin. Consequently, for the past year or so, we've been manually creating our releases. This actually hasn't been that much of a pain since we really only do it once a sprint at the end. Combined with my favorite &lt;a rel="nofollow" target="_blank" href="http://www.debianadmin.com/howto-replace-multiple-file-text-string-in-linux.html"&gt;perl script&lt;/a&gt; it doesn't really take that long. However, it does have the disadvantage of requiring some knowledge of what and now to do it. Ideally, it would be a job in &lt;a rel="nofollow" target="_blank" href="http://hudson-ci.org/"&gt;Hudson&lt;/a&gt;, anyone on the team could run as many times as they like.&lt;br /&gt;&lt;br /&gt;In an effort to try and &lt;a rel="nofollow" target="_blank" href="http://jlorenzen.blogspot.com/2010/04/thoughts-on-fowlers-continuous.html"&gt;automate as much as possible&lt;/a&gt;, I decided to try and automate releasing our legacy multi-module project using bash. This has several benefits: create a release faster, done consistently each time, turn-key solution anyone on the team can run that doesn't require stale documentation on how to do it.&lt;br /&gt;&lt;br /&gt;It took my several hours to essentially duplicate the maven release plugin process. Thanks to our new intern Scott Rogers and linux master Ron Alleva, I was eventually able to get it finished. It's my first "official" bash script so pardon the mess. If you've never attempted to automate your release project, first consider reading my article on &lt;a rel="nofollow" target="_blank" href="http://jlorenzen.blogspot.com/2007/09/how-to-effectively-use-snapshot.html"&gt;How to effectively use SNAPSHOT&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Here is the script available as a gist on github: &lt;a rel="nofollow" target="_blank" href="http://gist.github.com/401974"&gt;project-release.sh&lt;/a&gt;. Here is what it does:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Copies the current working branch (i.e. trunk) into another branch. It uses the pom.xml  value to get the current working branch.&lt;/li&gt;&lt;li&gt;Updates all the pom.xml version sections of the current working branch&lt;/li&gt;&lt;li&gt;Commits the pom.xml changes&lt;/li&gt;&lt;li&gt;Checks out the release branch&lt;/li&gt;&lt;li&gt;Updates all the pom.xml version sections of the release branch (basically stripping off -SNAPSHOT)&lt;/li&gt;&lt;li&gt;Commits the pom.xml changes&lt;/li&gt;&lt;/ol&gt;To run this script all you have to do is run: &lt;i&gt;project-release.sh 2 false&lt;/i&gt;. The first parameter (2) is the increment position that the current working branch needs to be next. For example, if trunk was on 1.2.0-SNAPSHOT and the position passed in was 2, then trunk gets updated to 1.3.0-SNAPSHOT. If the position was 3 then trunk would be updated to 1.2.1-SNAPSHOT. The second parameter is used when testing. It's like the dryRun option in the maven release plugin. When set to true, nothing gets copied or committed.&lt;br /&gt;&lt;br /&gt;A few notes about the script:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The base branch URL is hardcoded but could easily be passed in as another parameter or placed and read from some external file.&lt;/li&gt;&lt;li&gt;It uses the cmd &lt;i&gt;xpath&lt;/i&gt; to extract out the pom version, project name, and scm url. I'm on ubuntu 9.10 and according to synaptic I have libxml-xpath-perl version 1.13-6 installed.&lt;/li&gt;&lt;li&gt;It doesn't run any maven commands like mvn deploy. Other jobs in CI can accomplish that or you can easily add them into the script.&lt;/li&gt;&lt;li&gt;To run from Hudson:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Create a New Job&lt;/li&gt;&lt;li&gt;In the Build section Add a Execute Shell Step&lt;/li&gt;&lt;li&gt;Update the Command text with: $WORKSPACE/trunk/project-release.sh 2 false&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;Overall, I'm pretty happy with the outcome. And as we start to perform more releases among multiple projects I think it's going to really come in handy. I think ideally you should try and release your project using the maven release plugin, but if that isn't possible then don't give up. Just clone.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1280619439915049383-2038567867122876467?l=jlorenzen.blogspot.com' alt=''/&gt;&lt;/div&gt;</description>
         <author>jlorenzen</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-1280619439915049383.post-2038567867122876467</guid>
         <pubDate>Fri, 14 May 2010 22:40:00 +0000</pubDate>
      </item>
      <item>
         <title>Interview with DZone</title>
         <link>http://www.java.net/blog/kohsuke/archive/2010/04/29/interview-dzone</link>
         <description>&lt;p style="color:gray;"&gt;(I started cross-posting blogs to &lt;a rel="nofollow" target="_blank" href="http://kohsuke.org/2010/04/29/interview-with-dzone/"&gt;my own website&lt;/a&gt;.)&lt;/p&gt;
&lt;p&gt;I did a quick interview with DZone about my new company, &lt;a rel="nofollow" target="_blank" href="http://www.infradna.com/"&gt;InfraDNA&lt;/a&gt;, which they &lt;a rel="nofollow" target="_blank" href="http://java.dzone.com/articles/kohsuke-kawaguchi-talks-hudson"&gt;published on their website&lt;/a&gt;. Thank you DZone for the opportunity!&lt;/p&gt;</description>
         <guid isPermaLink="false">404144 at http://www.java.net</guid>
         <pubDate>Fri, 30 Apr 2010 04:45:48 +0000</pubDate>
      </item>
      <item>
         <title>Introducing InfraDNA, the Hudson company</title>
         <link>http://www.java.net/blog/kohsuke/archive/2010/04/26/introducing-infradna-hudson-company</link>
         <description>&lt;p style="color:gray;"&gt;(I started cross-posting blogs to &lt;a rel="nofollow" target="_blank" href="http://www.kohsuke.org/"&gt;my own website&lt;/a&gt;.)&lt;/p&gt;
&lt;p&gt;As I wrote in my farewell note, I was working on starting a new company around Hudson. It took longer than I initially anticipated, but it's finally &lt;a rel="nofollow" target="_blank" href="http://infradna.com/"&gt;open for business&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;The company will provide two things; one is support, so that I can answer your questions and problem reports in a timely fashion, and the other is consulting, so that I can help you develop custom plugins, or provide on-site support to work on some tricky problems.&lt;/p&gt;
&lt;p&gt;The name of the company is InfraDNA because I think of Hudson more as an infrastructure on which all kinds of server-side automation/tools can be built/deployed, and because I think this stuff is built into me (as in DNA) &amp;mdash; when I look back my career as a software engineer, I always somehow seem to come back to tooling. (Plus, the domain name was available!)&lt;/p&gt;
&lt;p&gt;Looking forward to hearing from you.&lt;/p&gt;</description>
         <guid isPermaLink="false">401531 at http://www.java.net</guid>
         <pubDate>Mon, 26 Apr 2010 23:09:17 +0000</pubDate>
      </item>
      <item>
         <title>POTD: GitHub API for Java</title>
         <link>http://www.java.net/blog/kohsuke/archive/2010/04/18/potd-github-api-java</link>
         <description>&lt;p style="color:gray;"&gt;(I started cross-posting blogs to &lt;a rel="nofollow" target="_blank" href="http://www.kohsuke.org/"&gt;my own website&lt;/a&gt;.)&lt;/p&gt;
&lt;p&gt;My project of the day (or &amp;quot;POTD&amp;quot;) is &lt;a rel="nofollow" target="_blank" href="http://kohsuke.org/github-api/"&gt;GitHub API for Java&lt;/a&gt; &amp;mdash; a library for accessing GitHub programmatically.&lt;/p&gt;
&lt;p&gt;As the Hudson community is embracing plugins developed in Git more and more, I needed to interact with GitHub as a part of the community infrastructure automation. I did a quick Google search to locate existing implementations, but unfortunately I couldn't find anything good. So I decided to just write my own. Thanks to a reasonable API design of GitHub and &lt;a rel="nofollow" target="_blank" href="http://develop.github.com/"&gt;a good documentation&lt;/a&gt;, it was very easy to do so. The trick is to use &lt;a rel="nofollow" target="_blank" href="http://jackson.codehaus.org/"&gt;the right library&lt;/a&gt;, which handles most of the JSON/Java databinding.&lt;/p&gt;
&lt;p&gt;The library so far only covers the part of the GitHub API that I care about, which is a small subset of the entire GitHub API. But hopefully this library is easy enough to extend so that other people can add the remaining APIs. The source code is available in &lt;a rel="nofollow" target="_blank" href="http://github.com/kohsuke/github-api"&gt;GitHub&lt;/a&gt;.&lt;/p&gt;</description>
         <guid isPermaLink="false">396720 at http://www.java.net</guid>
         <pubDate>Mon, 19 Apr 2010 05:38:28 +0000</pubDate>
      </item>
      <item>
         <title>Hudson console markups</title>
         <link>http://www.java.net/blog/kohsuke/archive/2010/04/14/hudson-console-markups</link>
         <description>&lt;p style="color:gray;"&gt;(I started cross-posting blogs to &lt;a rel="nofollow" target="_blank" href="http://www.kohsuke.org/"&gt;my own website&lt;/a&gt;.)&lt;/p&gt;
&lt;p&gt;Despite all the report comprehension in Hudson, such as JUnit, PMD, FindBugs, etc., log files still hold a special place in terms of capturing what has really happened. Hudson does a bit of AJAX in this space to let you follow output as it comes, but the log is basically just a plain text that doesn't really have structures.&lt;/p&gt;
&lt;p&gt;But that is changing. One of the recent improvements in Hudson is &lt;a rel="nofollow" target="_blank" href="http://hudson-ci.org/javadoc/index.html?hudson/console/package-summary.html"&gt;the infrastructure and extension points for Hudson&lt;/a&gt; (and its plugins) to mark up the console output to improve interactivity and do some cool stuff.&lt;/p&gt;
&lt;p&gt;I prepared two kinds of extension points for this. One is the ability to &lt;a rel="nofollow" target="_blank" href="http://hudson-ci.org/javadoc/index.html?hudson/console/ConsoleAnnotator.html"&gt;scan the console output line by line and add arbitrary markup to it&lt;/a&gt;. This can be used for context-independent markup, for example to turn URLs into hyperlinks, look for keywords like &amp;quot;ERROR&amp;quot;, that sort of things.&lt;/p&gt;
&lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://hudson-ci.org/javadoc/index.html?hudson/console/ConsoleNote.html"&gt;The other kind&lt;/a&gt; is more interesting, where we can place anchors (I call them 'notes') at arbitrary points during the output, and those notes can then in turn generate markups. This enables highly context sensitive markups, which I think has a lot of potential.&lt;/p&gt;
&lt;p&gt;For example, I started putting a note for every Ant target that gets executed during the Ant execution. I can use this to generate outline for the console output, so that you can jump to the interesting targets, or move up/down to next target very quickly. For simple build scripts, I can let users click the target name and jump to its definition in the build script.&lt;/p&gt;
&lt;p&gt;Another place I do this today is when Hudson reports an exception. I can make a stack trace foldable so as not to overwhelm users, and I can also hyperlink each stack trace element to its source file, as a way to encourage people to start hacking Hudson. Or if a build fails, I can present an UI that gives you actions that you might want to take --- 1. edit config, 2. rebuild, 3. report to the admin, etc.&lt;/p&gt;
&lt;p&gt;With Maven, where Hudson puts a little spying agent inside the Maven process, I can do even better. For example, wouldn't it be nice if you can hide all the &amp;quot;[INFO]&amp;quot; message with one mouse click? How about a navigation from compilation failure reports to source files? Or if you have an outline of modules that were built and jump to them quickly?&lt;/p&gt;
&lt;p&gt;If you are an user, this is just a sneak preview into what will come. If you are a plugin developer, think about all the things you might want to do with this mechanism!&lt;/p&gt;</description>
         <guid isPermaLink="false">394855 at http://www.java.net</guid>
         <pubDate>Thu, 15 Apr 2010 01:15:14 +0000</pubDate>
      </item>
      <item>
         <title>Thoughts on Fowler's Continuous Integration</title>
         <link>http://jlorenzen.blogspot.com/2010/04/thoughts-on-fowlers-continuous.html</link>
         <description>It's always kind of nice to go back to the basics. I've always enjoyed re-reading basic programming practices and patterns. I tend to forget the things I don't use on a daily basis. That's why I enjoyed reading Martin Fowler's article on &lt;a rel="nofollow" target="_blank" href="http://martinfowler.com/articles/continuousIntegration.html"&gt;Continuous Integration&lt;/a&gt;. The article says the last significant update occurred May 2006, but it's withstood the test of time; much like &lt;a rel="nofollow" target="_blank" href="http://en.wikipedia.org/wiki/The_Cathedral_and_the_Bazaar"&gt;The Cathedral and the Bazaar&lt;/a&gt;. But if you don't have the time to read this rather long article, here are a few of the favorites I pulled out as I read it over the course of a few days. Before that, let me explain a little bit of my experience.&lt;br /&gt;&lt;br /&gt;At my first programming job we didn't really have a VCS (Version Control System) like CVS or SVN nor did we have a CI (Continuous Integration) server; we really didn't know any better. We essentially did all of our work straight off a shared drive (I know). But that was before I came to Gestalt, now Accenture, 5 years ago. Since then I've been exposed to CVS--&amp;gt;SVN--&amp;gt;Git, Ant--&amp;gt;Maven 1--&amp;gt;Maven 2,&amp;nbsp; CruiseControl--&amp;gt;Hudson, and finally TDD (Test Driven Development). Being exposed to all of this has been a huge improvement to my career. More importantly it's been a huge benefit to how I write software and the tools our teams use such as VCS and CI. I can't image developing software without them.&lt;br /&gt;&lt;br /&gt;Here are some points out of &lt;a rel="nofollow" target="_blank" href="http://martinfowler.com/articles/continuousIntegration.html"&gt;Continuous Integration&lt;/a&gt; that I would think applies to any project java or not:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Work does not stop on your commit&lt;/b&gt;&lt;br /&gt;&lt;blockquote&gt;"However my commit doesn't finish my work. At this point we build again, but this time on an integration machine based on the mainline code. Only when this build succeeds can we say that my changes are done."&lt;/blockquote&gt;So true. Just because you ran some tests locally or manually tested it, doesn't mean your done just because you checked in your changes. You've got to monitor CI to ensure it passes. This has been a topic of discussion on my team lately as we've come in in the morning with a few broken builds. Solution: check in often during the day, but don't checkin and leave and not verify CI passed. Either stay late, sign in at home, come in early, or checkin first thing the next day.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Simple checkout build rule&lt;/b&gt;&lt;br /&gt;&lt;blockquote&gt;"The basic rule of thumb is that you should be able to walk up to the project with a virgin machine, do a checkout, and be able to fully build the system."&lt;/blockquote&gt;This is a very important point. Not only will this improve the productivity of new team members but also reduce the amount of time it takes to create new CI jobs. This rule is even more important for open source projects. I've had several issues in the past trying to patch open source projects and wasted several hours just trying to build their code. If you want people do contribute to your project, make it easy for them to build your software. For example, I've been wanting to write a simple &lt;a rel="nofollow" target="_blank" href="http://do.davebsd.com/wiki/Docky"&gt;Docky plugin&lt;/a&gt; for &lt;a rel="nofollow" target="_blank" href="http://hudson-ci.org/"&gt;Hudson&lt;/a&gt;, but have ran into several issues (&lt;a rel="nofollow" target="_blank" href="https://answers.launchpad.net/docky/+question/99325"&gt;New Plugin&lt;/a&gt; and &lt;a rel="nofollow" target="_blank" href="https://answers.launchpad.net/docky/+question/99967"&gt;Missing Package&lt;/a&gt;) trying to build the Do project. Have those questions really been Answered? NO! What have I done about it? I haven't retried it since. To restate Mr. Fowler, I should be able to easily checkout your code and at a minimum build it. As an added bonus it'd be nice to run unit tests as well.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Automate everything&lt;/b&gt;&lt;br /&gt;&lt;blockquote&gt;"However like most tasks in this part of software development it can be automated - and as a result should be automated. Asking people to type in strange commands or clicking through dialog boxes is a waste of time and a breeding ground for mistakes."&lt;/blockquote&gt;If your just getting started with CI this can often be difficult. But your long term goal should be to automate everything. This includes creating/destroying your database, deploying/undeploying your application, automating your tests, copying configuration files around. I'd even go as far as to say automate the creation of the development environment: installing maven and java for example. Again this not only speeds up new team members productivity but also those virgin CI servers.&lt;br /&gt;&lt;br /&gt;Two great examples of this. Before we had a internal CI team, our team was manually setting up multiple CI servers with maven, java, jboss, and a database. These new servers couldn't be used until all of this stuff was manually configured. Then our internal CI team helped automate some of this stuff and we can very easily use hudson to point jobs at different servers within minutes. Something that wasn't really possible before without manually intervention. And all they really did was call a few simple ant copy commands from maven.&lt;br /&gt;&lt;br /&gt;Another good example of this comes back from our old CruiseControl and Ant days. At one point in our project we were constantly breaking a major piece of functionality and one of the main reasons was it was very difficult to test. It was a distributed test with multiple servers communicating with multiple clients via SIP. The build process called for building the latest code, stopping 2 instances of weblogic (1 local, 1 remote), starting weblogic, deploying the latest code, waiting for weblogic to finish starting (not easy mind you), and then running our automated test. This was rather huge undertaking, but given a few weeks we had the core of it automated. It was amazing. I never thought it would have been possible, but it was and anytime that test failed we knew immediately we broke something. We were able to accomplish the difficult parts by calling remote bash scripts via ssh from ant.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Imperfect Tests&lt;/b&gt;&lt;br /&gt;&lt;blockquote&gt;"Imperfect tests, run frequently, are much better than perfect tests that are never written at all. "&lt;/blockquote&gt;Not exactly sure what he means by imperfect tests, but this is one place I currently disagree. It takes practice to write good tests. Once you refactor and maintain tests over a long period of time you start getting pretty good at writing tests that require less refactoring. One of the things that is killing the productivity of our team right now is what I call "cronically failing tests" or tests that randomly fail for no reason. You check the change log and nothing changed in the build which means it shouldn't have failed. You rebuild the job and it passes. Here lately this can be attributed to date comparison asserts and issues with timing. For example, the test passes when the database is local, but fails when the database is remote. Or you get different results when the time on the database server is not sync'd. The end result is this produces false negatives that really hurt the validity of CI; developers just start ignoring all failures. Once you've identified one of these cronically failing tests, it's important the author of that test, or the person who last modified it, refactor the test to be flexible. If the author doesn't do it, they will continue producing these types of imperfect tests.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Good Build Characteristics&lt;/b&gt;&lt;br /&gt;He had several comments I would wrap into good general build characteristics. Two of which are fast builds and accessible artifacts. As a general rule he suggests keeping build times to around 10 minutes. Which is usually achievable for compile/unit test jobs, but database related and above can usually take longer. My general guideline is try to keep those longer running builds to around 30 minutes, but definitely no longer than an hour. Unfortunately right now, we have several of those 40-55 minute builds I'd like to trim down some. It'd be great to see a hudson plugin that could show me how long each part of my build took.&lt;br /&gt;&lt;br /&gt;With a combination of our company maven repository and hudson, it's pretty easy to make our artifacts accessible. This is really huge as sometimes I don't waste time building certain things that take forever to build; I'll just download them from hudson. I know a lot of times our DBA will just download the zip he wants to test and prevents him from updating his source and building, etc. Another related topic is we have several nightly jobs that deploy the latest code to jboss/websphere that can be used the next day by everyone to see/test/verify the latest code.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Rollback Deployment&lt;/b&gt;&lt;br /&gt;&lt;blockquote&gt;"If you deploy into production one extra automated     capability you should consider is automated rollback."&lt;/blockquote&gt;This was a pretty new concept for me and one we don't necessarily follow. I've heard of Continuous Deployment, but never really heard about a rollback feature. I know we've accidentally benefited from a build failing and not deploying the latest nightly code thus allowing us to perform diff-debugging to track down a bug. We had 2 servers that built the night before, 1 passed and the other failed so it contained the previous days build. A bug was detected on the passing server and we were unable to reproduce on the outdated server. This told us it had been introduced in the past 24 hours. This isn't exactly rolling back but maybe the morale of the story is keeping a server around that is behind a day.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Summary&lt;/b&gt;&lt;br /&gt;There is a lot of good general information in this article and I would encourage anyone to take the time to read it. I only highlighted the things that really stuck out at me; there were a lot more useful things I passed mentioning.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1280619439915049383-5058753529986294660?l=jlorenzen.blogspot.com' alt=''/&gt;&lt;/div&gt;</description>
         <author>jlorenzen</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-1280619439915049383.post-5058753529986294660</guid>
         <pubDate>Wed, 14 Apr 2010 22:43:00 +0000</pubDate>
      </item>
      <item>
         <title>POTD: Custom Access Modifier</title>
         <link>http://www.java.net/blog/kohsuke/archive/2010/04/09/potd-custom-access-modifier</link>
         <description>&lt;p&gt;My project of the day (or &amp;quot;POTD&amp;quot;) is &lt;a rel="nofollow" target="_blank" href="http://kohsuke.org/access-modifier/"&gt;Custom Access Modifier&lt;/a&gt; &amp;mdash; an annotation and an enforcer that lets you define application-defined custom access modifiers,&lt;/p&gt;
&lt;p&gt;So let me explain this a bit more. Say you have a library that people use, and say you are thinking about deprecating one of the methods. Yes, you can just put &lt;code&gt;@Deprecated&lt;/code&gt;, but that doesn't actually prevent people from continuing to use them. This is where you can put the custom access modifier, like this:&lt;/p&gt;
&lt;pre&gt;
public class Library {
    @Deprecated @Restricted(DoNotUse.class)
    public void foo() {
        ...
    }
}&lt;/pre&gt;
&lt;p&gt;This causes compilation to fail for new source files that try to call the &lt;tt&gt;foo&lt;/tt&gt; method. But at the resulting class file still contains the method, so existing applications continue to work. As per the JVM spec, this contraint enforcement is strictly in the user land and thus voluntary, and at the runtime there's no check nor overhead.&lt;/p&gt;
&lt;p&gt;Or say you have a &amp;quot;public&amp;quot; class that's never intended to be used outside your library? Not a problem.&lt;/p&gt;
&lt;pre&gt;
@Restricted(NoExternalUse.class)
public class FooBarImpl {
    ...
}&lt;/pre&gt;
&lt;p&gt;In the first version, I packaged the enforcer as a Maven mojo, but it should be trivial to write an Ant task or CLI. A real usability improvement is if this can be done as JSR-269 compatible annotation processor, but unfortunately the enforcer needs bytecode level access to the source files being compiled, and I don't think JSR-269 gives me that, which is a pity.&lt;/p&gt;
&lt;p&gt;The real flexibility here is that you can define your own access restrictions, not just using those that I provided out of the box.&lt;/p&gt;
&lt;p&gt;The reason I came up with this is to better assist the feature deprecation in Hudson. With 6+ years of the code history, there are a fair amount of deprecated code in the foundation. We'd eventually like to remove them, but we can't just delete them all the sudden &amp;mdash; there might be plugins using them out there. But with this plugin, I can actually make sure that plugins are not using those deprecated features that are candidates for removal.&lt;/p&gt;
&lt;p&gt;I hope you'll find &lt;a rel="nofollow" target="_blank" href="http://kohsuke.org/access-modifier/"&gt;this tool&lt;/a&gt; useful. The source is on GitHub.&lt;/p&gt;</description>
         <guid isPermaLink="false">391855 at http://www.java.net</guid>
         <pubDate>Fri, 09 Apr 2010 23:08:57 +0000</pubDate>
      </item>
      <item>
         <title>Good bye, Sun/Oracle</title>
         <link>http://www.java.net/blog/kohsuke/archive/2010/04/05/good-bye-sunoracle</link>
         <description>&lt;p&gt;I started working for Sun Microsystems since Janurary 2001, when I first came to the US. During these years I was able to work on many different projects, such as MSV, JAXB, JAX-WS, Metro, GlassFish v3, and Hudson, to name a few, with many great people. It was all quite an enjoyable journey. I won't list all those names one by one here, for it will be too long, but if you are one of them, I think you know that I'm talking about you. As my colleague Abhijit said once, a large part of enjoying your work is the people you work with.&lt;/p&gt;
&lt;p&gt;So with a bit of sadness and a lot of excitements, I announce that today is my last day at Oracle.&lt;/p&gt;
&lt;p&gt;Where am I heading next? I'm actually starting my own company to take Hudson to the next stage. This has always been in the back of my mind, and I'm very excited that I'm finally doing it. Stay tuned for more details, in a week or so. But in the mean time, if you'd like get any custom development/support done on Hudson, please let me know at &lt;a rel="nofollow" target="_blank" href="mailto:kk@kohsuke.org"&gt;kk@kohsuke.org&lt;/a&gt; so that we can start having a conversation.&lt;/p&gt;
&lt;p&gt;Even though I leave Oracle, I'll continue to lead the Hudson project. I'll be working with Oracle to transfer the infrastructure services to their IT operations team. There might be some out-of-schedule releases, service disruptions, and other inconveniences during this period, but hopefully things will be back in order relatively quickly.&lt;/p&gt;
&lt;p&gt;And finally, big thank you to everyone in the Hudson community, and in a broader java.net community. I wouldn't be here without you guys, and I feel very proud that I'm a part of it. Thanks for your patronage to my projects, and I hope our relationship will continue.&lt;/p&gt;</description>
         <guid isPermaLink="false">388683 at http://www.java.net</guid>
         <pubDate>Mon, 05 Apr 2010 21:59:13 +0000</pubDate>
      </item>
      <item>
         <title>Hudson Hackathon Day 1</title>
         <link>http://www.java.net/blog/kohsuke/archive/2010/03/19/hudson-hackathon-day-1</link>
         <description>&lt;img border="0" align="left"/&gt;&lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://wiki.hudson-ci.org/display/HUDSON/Hudson+Bay+Area+Hackathon+2.0"&gt;Hudson Hackathon Day 1&lt;/a&gt; is over, and I'm just back to the office.&lt;/p&gt;
&lt;p&gt;Total of 9 people came and we had a great time talking about infrastructure issues, possible enhancements, design dicussions, exchanging tips and plugins that they've developed, and otherwise building personal relationships. It was a beautiful day outside, and fortunately the meeting room had a lot of Sun lights to create a warm atmosphere.&lt;/p&gt;
&lt;div align="center"&gt;&lt;img alt="" src="http://www.java.net/sites/default/files/HackathonDay1.jpeg"/&gt;&lt;/div&gt;
&lt;p&gt;As for me, I didn't get much hacking done, but that's OK because my job there was to help others more than to get hacking done myself.&lt;/p&gt;
&lt;div align="center"&gt;&lt;img alt="" src="http://www.java.net/sites/default/files/HackathonDay1.2.JPG"/&gt;&lt;/div&gt;&lt;table id="attachments" class="sticky-enabled"&gt;
 &lt;thead&gt;&lt;tr&gt;&lt;th&gt;Attachment&lt;/th&gt;&lt;th&gt;Size&lt;/th&gt; &lt;/tr&gt;&lt;/thead&gt;
&lt;tbody&gt;
 &lt;tr class="odd"&gt;&lt;td&gt;&lt;a rel="nofollow" target="_blank" href="http://www.java.net/sites/default/files/HackathonDay1.jpeg"&gt;HackathonDay1.jpeg&lt;/a&gt;&lt;/td&gt;&lt;td&gt;84.27 KB&lt;/td&gt; &lt;/tr&gt;
 &lt;tr class="even"&gt;&lt;td&gt;&lt;a rel="nofollow" target="_blank" href="http://www.java.net/sites/default/files/HackathonDay1.2.JPG"&gt;HackathonDay1.2.JPG&lt;/a&gt;&lt;/td&gt;&lt;td&gt;68.94 KB&lt;/td&gt; &lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description>
         <guid isPermaLink="false">379113 at http://www.java.net</guid>
         <pubDate>Sat, 20 Mar 2010 01:37:23 +0000</pubDate>
         <enclosure length="86288" type="image/jpeg" url="http://www.java.net/sites/default/files/HackathonDay1.jpeg" />
      </item>
      <item>
         <title>Hudson Hackathon this weekend</title>
         <link>http://www.java.net/blog/kohsuke/archive/2010/03/16/hudson-hackathon-weekend</link>
         <description>&lt;p&gt;If you are living in San Francisco bay area, or if you are visiting the area for EclipseCon next week, make sure to come to Hudson Hackathon this Friday 3/19 and/or Saturday 3/20. The plan is to meet up, hang out, chat, hack code, and have fun. &lt;a rel="nofollow" target="_blank" href="http://wiki.hudson-ci.org/display/HUDSON/Hudson+Bay+Area+Hackathon+2.0"&gt;If you are planning to attend, please RSVP by leaving your name on Wiki&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We planned this for two days, so that people doing Hudson for work can come Friday during their business hours, and people doing Hudson outside work can come Saturday without conflicting with day job commitments. Friday it'll be hosted at Oracle Santa Clara campus (and I booked a nice conference room that we only use for special occasions), and Saturday it'll be hosted at Hacker Dojo in Mountain View. &lt;a rel="nofollow" target="_blank" href="http://wiki.hudson-ci.org/display/HUDSON/Hudson+Bay+Area+Hackathon+2.0"&gt;See the Wiki page for more details&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It should be a lot of fun &amp;mdash; please come join us.&lt;/p&gt;</description>
         <guid isPermaLink="false">376332 at http://www.java.net</guid>
         <pubDate>Tue, 16 Mar 2010 18:36:43 +0000</pubDate>
      </item>
      <item>
         <title>Free Maven Repository Hosting for Open Source projects by Sonatype</title>
         <link>http://jlorenzen.blogspot.com/2010/03/free-maven-repository-hosting-for-open.html</link>
         <description>I'm very excited to &lt;a rel="nofollow" target="_blank" href="http://java.dzone.com/news/sonatype-free-maven-repo"&gt;see&lt;/a&gt; Sonatype support maven repositories for Open Source projects that use maven. In all honesty, they didn't have to do this. Unfortunately, the java.net repo was &lt;a rel="nofollow" target="_blank" href="http://java.dzone.com/articles/dont-publish-nexus-oss-here"&gt;harming&lt;/a&gt; the maven reputation. I've had direct experience using the java.net maven repo and can say it was an unpleasant experience. When we open sourced our 4 JBI (Java Business Integration) &lt;a rel="nofollow" target="_blank" href="http://wiki.open-esb.java.net/Wiki.jsp?page=GestaltUserCenter"&gt;Components&lt;/a&gt; their home existed on java.net and we used the their maven repo. It was difficult to upload anything and it seemed to be constantly down.&lt;br /&gt;&lt;br /&gt;Before this announcement, open source java projects using maven didn't really have an option as to where they could publish their artifacts. To my knowledge neither Google Code or Sourceforge offered this capability. Apache and Codehaus did and obviously you still have the Maven Central (http://repo1.maven.org/maven2/), but I never went through the process of what it took to use them. Now it doesn't matter where your project is hosted. Hopefully the next thing to come is free Continuous Integration services in the cloud using &lt;a rel="nofollow" target="_blank" href="http://hudson-ci.org/"&gt;Hudson&lt;/a&gt;. I think this is the next step for project hosting sites like Google Code and github.&lt;br /&gt;&lt;br /&gt;Providing free maven repos I think has a lot of benefits and not just for maven users. For example, this should benefit all dependency management tools that are built on top of maven repos. I'm not 100% sure tools like &lt;a rel="nofollow" target="_blank" href="http://ant.apache.org/ivy/"&gt;Ivy&lt;/a&gt;, &lt;a rel="nofollow" target="_blank" href="http://groovy.codehaus.org/Grape"&gt;Grape&lt;/a&gt;, &lt;a rel="nofollow" target="_blank" href="http://www.gradle.org/"&gt;Gradle&lt;/a&gt;, and &lt;a rel="nofollow" target="_blank" href="http://buildr.apache.org/"&gt;Buildr&lt;/a&gt; use maven repo's, but my guess is they do and this will benefit those users. Another benefit is being able to standardize on maven repositories, hopefully preventing users from searching where they can find your artifacts. I've wasted a lot of time in the past trying to find valid repositories where I could find artifacts for a project I was wanting to use.&lt;br /&gt;&lt;br /&gt;I'm also very impressed with the &lt;a rel="nofollow" target="_blank" href="https://docs.sonatype.com/display/NX/OSS+Repository+Hosting"&gt;features&lt;/a&gt; Sonatype is providing. Not only will they support release artifacts but &lt;a rel="nofollow" target="_blank" href="http://www.blogger.com/goog_1267710764129"&gt;SNAPSHOT's&lt;/a&gt; as well which could consume a lot of space. You'll also be able to easily sync with Central. Finally, they will support a staging repo in order to test things out before officially releasing.&lt;br /&gt;&lt;br /&gt;So go &lt;a rel="nofollow" target="_blank" href="https://docs.sonatype.com/display/NX/OSS+Repository+Hosting"&gt;sign up&lt;/a&gt; and thanks &lt;a rel="nofollow" target="_blank" href="http://www.sonatype.com/"&gt;Sonatype&lt;/a&gt;. Also, read this &lt;a rel="nofollow" target="_blank" href="http://jlorenzen.blogspot.com/2007/09/how-to-create-release-using-maven2.html"&gt;post&lt;/a&gt; to learn how to release your project using the maven release plugin.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1280619439915049383-1244212587354725326?l=jlorenzen.blogspot.com' alt=''/&gt;&lt;/div&gt;</description>
         <author>jlorenzen</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-1280619439915049383.post-1244212587354725326</guid>
         <pubDate>Mon, 01 Mar 2010 15:48:00 +0000</pubDate>
      </item>
      <item>
         <title>Commit Comments: A Conversation with your Future Self</title>
         <link>http://jlorenzen.blogspot.com/2010/02/commit-comments-conversation-with-your.html</link>
         <description>&lt;a rel="nofollow" target="_blank" href="http://www.wpromote.com/blog/wp-content/uploads/2008/11/back-to-the-future.jpg"&gt;&lt;img alt="" border="0" src="http://www.wpromote.com/blog/wp-content/uploads/2008/11/back-to-the-future.jpg" style="cursor:pointer;float:right;height:280px;margin:0pt 0pt 10px 10px;width:434px;"/&gt;&lt;/a&gt;I frequently find myself searching subversion commit logs trying to find hints as to why certain "features/bugs" where introduced and why. Usually this results in wasting several hours and almost every time I get frustrated with a lack of dialogue in commit comments. I can't stress enough the importance of this often over looked feature when committing changes. A lot of developers look at it like a 30 second burden that's preventing them from taking lunch earlier. What they really should be doing is pretending it's a conversation with their future self. Six months from now you're most likely going to be seeing those comments, or lack of, wondering why you made that change. It's in that moment I'd rather have a very descriptive summary of what changed and why verses diff'in every version known to man.&lt;br /&gt;&lt;br /&gt;I'm not asking for a Kevin Costner script, just be a little more specific. On average, my comments are 1-3 sentences. For the important changes, I've used paragraphs before. Comments with fewer than 5 words drive me nuts, and I have seen a lot of them.&lt;br /&gt;&lt;br /&gt;Ever seen a movie where campers make a trail using something like marshmallows so they can find their way back? Think of your commit comments like marshmallows helping you unravel the mystery of an issue and start developing the habit of providing more descriptive commit comments.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Other Useful Tools&lt;/span&gt;&lt;a rel="nofollow" target="_blank" href="http://3.bp.blogspot.com/_u6FjI-f0VoU/S4YFhTDRSrI/AAAAAAAAALw/w9lS45K_ct8/s1600-h/jira-svn.png"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5442043269331634866" src="http://3.bp.blogspot.com/_u6FjI-f0VoU/S4YFhTDRSrI/AAAAAAAAALw/w9lS45K_ct8/s400/jira-svn.png" style="cursor:pointer;float:right;height:136px;margin:0pt 0pt 10px 10px;width:400px;"/&gt;&lt;/a&gt;&lt;br /&gt;One of the tools I have grown fond of is the &lt;a rel="nofollow" target="_blank" href="https://studio.plugins.atlassian.com/wiki/display/SVN/Subversion+JIRA+plugin"&gt;Jira subversion plugin&lt;/a&gt;. Our team uses Jira as our issue tracking system. Nothing gets committed without a Jira number. This is enforced using a subversion &lt;a rel="nofollow" target="_blank" href="http://svnbook.red-bean.com/nightly/en/svn.reposadmin.create.html"&gt;pre-commit hook&lt;/a&gt;, so every developer has to start their comment with a Jira number. Then in Jira, there is a Subversion Commits link at the bottom to where anyone can view the files changes and their comments.&lt;br /&gt;&lt;br /&gt;Using the subversion pre-commit hook has another added bonus, which is using the &lt;a rel="nofollow" target="_blank" href="http://wiki.hudson-ci.org/display/HUDSON/JIRA+Plugin"&gt;Hudson Jira Plugin&lt;/a&gt;. After a successful build, hudson will extract the Jira number(s) from the commit comments and add a comment to the Jira stating it was integrated at a specific build # and includes a link.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1280619439915049383-3300634824329473048?l=jlorenzen.blogspot.com' alt=''/&gt;&lt;/div&gt;</description>
         <author>jlorenzen</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-1280619439915049383.post-3300634824329473048</guid>
         <pubDate>Wed, 24 Feb 2010 22:15:00 +0000</pubDate>
         <media:thumbnail height="72" url="http://3.bp.blogspot.com/_u6FjI-f0VoU/S4YFhTDRSrI/AAAAAAAAALw/w9lS45K_ct8/s72-c/jira-svn.png" width="72" />
      </item>
      <item>
         <title>Empower Hudson with Artifactory - Track and Replay Your Build Artifacts</title>
         <link>http://blogs.jfrog.org/2009/12/empower-hudson-with-artifactory-track.html</link>
         <description>&lt;span&gt;&lt;span style="font-weight:bold;font-style:italic;font-size:130%;"&gt;Overview&lt;/span&gt;&lt;br&gt;In this blog, I will demonstrate how to integrate &lt;a rel="nofollow" title="Hudson" target="_blank" href="https://hudson.dev.java.net/"&gt;Hudson&lt;/a&gt; with &lt;a rel="nofollow" title="JFrog&amp;#39;s Artifactory" target="_blank" href="http://artifactory.jfrog.org/"&gt;JFrog's Artifactory&lt;/a&gt; repository manager to have full build-to-artifacts traceability. We will use Artifactory plug-in to deploy the Hudson build artifacts and track them back to their original build.&lt;br&gt;&lt;br&gt;Keeping the history and reproducibility of code is a must-have for any modern project.&lt;br&gt;Using one of the different flavors of version control applications, you can easily reproduce the state of any point in the past using the different methods of SCM tagging.&lt;br&gt;&lt;br&gt;But what happens when you want to reproduce binary products from a certain phase?&lt;br&gt;Are dependencies considered? Does anyone really remember what version of dependency X was used in version 1.0 or in version 3.1 of your application? What if you used version ranges or dynamic properties? Was the application compiled using JDK 5 or 6?&lt;br&gt;&lt;br&gt;All this information can be recorded during the publication of your binaries, which is usually done by a CI server of your choice.&lt;br&gt;Your CI server has all the knowledge required in order to reproduce a build:&lt;br&gt;&lt;/span&gt; &lt;div style="font-family:lucida grande;"&gt;&lt;span style="font-size:100%;"&gt;  &lt;/span&gt;&lt;/div&gt; &lt;ul style="font-family:lucida grande;"&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Information on the builds themselves &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;The published items &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Version information &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Dependencies &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Build environment details &lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span&gt;But how can you capture all this data? This is where Artifactory kicks in!&lt;br&gt;&lt;br&gt;Artifactory (v2.1.3+ OSS) is open for communication from any build process to receive information needed for tracing/reproducing a build - the sender of this information is typically your build server!&lt;br&gt;The information is transferred &lt;/span&gt;&lt;span&gt;via REST&lt;/span&gt;&lt;span&gt; in the form of a BuildInfo JSON object and contains details about the modules, artifacts, dependencies, environments, properties, and more.&lt;br&gt;All builds and binaries are provided with bi-directional links that enable you to reproduce and analyze the impact of any action. &lt;/span&gt;&lt;div style="font-family:lucida grande;"&gt;&lt;span style="font-size:100%;"&gt;&lt;br&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="font-family:lucida grande;"&gt;&lt;span style="font-size:100%;"&gt;Presently, JFrog provides a first integration with Hudson and Maven 2. Other technology stacks are coming, but for the purpose of this blog I will use a setup of Hudson with a Maven 2 build.&lt;br&gt;&lt;br&gt;So let's get "crackin'"!&lt;br&gt;&lt;br&gt;We assume that your instance of Hudson is already configured to request all it's dependencies from Artifactory. This of course ensures that all your build's dependencies are cached in Artifactory and can be used for build reproducibility. &lt;/span&gt;&lt;/div&gt;   &lt;div style="font-family:lucida grande;"&gt;&lt;span style="font-size:100%;"&gt;&lt;br&gt;&lt;span style="font-size:130%;"&gt;&lt;b style="font-style:italic;"&gt;Installing Hudson's Artifactory Plug-in&lt;/b&gt;&lt;/span&gt;&lt;br&gt;To install the Artifactory plug-in, simply browse from the main menu to &amp;quot;Manage Hudson&amp;quot; -&amp;gt; &amp;quot;Manage Plugins&amp;quot; -&amp;gt; &amp;quot;Available&amp;quot; Tab, and check to enable &amp;quot;Artifactory Plug-in&amp;quot;. Once the plug-in has been downloaded and installed, restart Hudson for the changes to take effect.&lt;br&gt;&lt;br&gt;Now we'll configure the plug-in on a system-wide level and point it to the Artifactory to which we would like to publish the information (please note that Artifactory should be running and available at this point).&lt;br&gt;To do this, enter the &amp;quot;Configure System&amp;quot; menu via &amp;quot;Manage Hudson&amp;quot; -&amp;gt; &amp;quot;Configure System&amp;quot;, and then configure the URL (up to the application context name, like &amp;quot;http://localhost:8081/artifactory&amp;quot;), and optional credentials (if anonymous access is enabled, you don&amp;#39;t need to provide them). The need for credentials of an authenticated user comes from the fact that Hudson requests a list of deployable repositories from Artifactory, so you can choose the destination of your binaries at a later stage.&lt;br&gt;Notice that you can add multiple Artifactory configurations to suit your needs.&lt;br&gt;&lt;br&gt;Next, we'll configure the plug-in at the "Job" level.&lt;br&gt;Enter the Job configuration by selecting your Job and clicking the "Configuration" link. Scroll down to the &lt;b&gt;Post-build Actions&lt;/b&gt; option group, and select "Deploy artifacts to Artifactory". Once selected, the menu will expand and will let you choose the "Artifactory server" and "Target repository" to which to deploy. As implied by the field names and the "Deployer username" and "Deployer password" credentials you provide, you must have "Deploy" permission on the target repository you select.&lt;br&gt;Being able to select your deployment target from a ready-made list, which is received directly from Artifactory, helps you avoid the pitfall of configuring your "Distribution Management" with typos.&lt;br&gt;&lt;br&gt;The Artifactory plug-in deploys via REST API, which optimizes the process of unique/non-unique snapshots and doesn't require credential and distribution management configuration in your settings.xml and POM files.&lt;br&gt;Unlike Maven, which deploys each module as its build is completed (which may result in a partial deployment of your project's artifacts if your build fails at some point), the Artifactory plug-in deploys only when the entire build completes successfully (much like the built-in Hudson deployer). Each deployed artifact is tagged with buildName and buildNumber properties, and finally the Build Info is published.&lt;br&gt;&lt;br&gt;At this point, you can run your Job, and then view the "Console output" to see the deployment and build info publication log messages.&lt;br&gt;&lt;/span&gt;&lt;br&gt;&lt;div style="text-align:left;"&gt;&lt;a rel="nofollow"&gt;&lt;img style="width:584px;height:228px;" src="http://docs.google.com/a/jfrog.org/File?id=dc885b7m_12hh7rn8fq_b"&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight:bold;font-style:italic;font-size:130%;"&gt;&lt;br&gt;Artifactory's Build Management&lt;/span&gt;&lt;br&gt;Now that the Job is complete, the artifacts are deployed, and the build info is published, we can view the build info in Artifactory by clicking the "Artifacts" tab under the new "Browse:Builds" sub-menu. &lt;/span&gt;&lt;/div&gt; &lt;div style="font-family:lucida grande;"&gt;&lt;span style="font-size:100%;"&gt;Here, we can see a list of all the published build names and the time each was last built.&lt;br&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="font-family:lucida grande;"&gt;&lt;span style="font-size:100%;"&gt;Drilling down through the build number list, we can view the general info, the published modules, and the XML representation of the selected build.&lt;br&gt;Notice that the top of the build browser displays navigable breadcrumbs that are also synchronized with a RESTful URL that provides easy access to every part of every build.&lt;br&gt;The general info tab displays the main details about the build (name, number, type, etcetera) properties that were attached, and even the option to save the published module's artifacts and dependencies as saved search results (requires the "Smart Searches" add-on).&lt;br&gt;&lt;br&gt;Clicking on the name of a module displays a list of the artifacts and dependencies that are part of the selected module.&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;/div&gt;&lt;a rel="nofollow"&gt;&lt;img style="width:584px;height:273px;" src="http://docs.google.com/a/jfrog.org/File?id=dc885b7m_14d4wzg8dh_b"&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;div style="font-family:lucida grande;"&gt;&lt;div style="text-align:left;"&gt; &lt;div style="text-align:left;"&gt;&lt;div style="text-align:left;"&gt;&lt;a rel="nofollow"&gt;&lt;img style="width:584px;height:272px;" src="http://docs.google.com/a/jfrog.org/File?id=dc885b7m_16t9dx37cm_b"&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;/div&gt; &lt;/div&gt;&lt;/div&gt;&lt;span style="font-size:100%;"&gt;When deleting an artifact that's associated with a build, either as a product or a dependency, Artifactory will notify you of the association prior to the removal.&lt;br&gt;&lt;br&gt;Promotion of published modules is also made possible by the "Save search results" actions that are available through the General Build Info tab (requires the "Smart Searches" add-on).&lt;br&gt;Moreover, buildName and buildNumber properties, allows us to manually search build artifacts through the Property Searcher (requires the "Properties" add-on).&lt;br&gt;&lt;br&gt;&lt;span style="font-style:italic;font-weight:bold;font-size:130%;"&gt;Conclusion&lt;/span&gt;&lt;br&gt;Using Hudson (and others to be supported soon) and Artifactory we've:&lt;br&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="font-family:lucida grande;"&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;/div&gt; &lt;div&gt; &lt;ul&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Supplied Hudson with all the needed dependencies from Artifactory—helping us keep the exact dependencies that were used in each build&lt;br&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Deployed all produced binaries to Artifactory—helping us keep and promote all the products of the build&lt;br&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Published build information to Artifactory—helping us manage and keep track of every build, environment, product, and dependency&lt;br&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt; &lt;span&gt;With the assistance of these tools and methods, you will be able to reproduce and execute a build from any point of recorded time or compare information between different builds.&lt;br&gt;You may want to visit our build integration &lt;a rel="nofollow" title="wiki page" target="_blank" href="http://wiki.jfrog.org/confluence/display/RTF/Build+Integration"&gt;wiki page&lt;/a&gt; for a more in-depth explanation of the process.&lt;br&gt;&lt;br&gt;Have fun, and be careful not to break the build. ;)&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div&gt;&lt;br&gt;   &lt;a rel="nofollow" target="_blank" href="http://docs.google.com/a/jfrog.org/File?id=dc885b7m_13gszzrsg4_b"&gt;&lt;/a&gt;&lt;br&gt;   &lt;div&gt;&lt;br&gt;       Hudson    &lt;/div&gt;&lt;br&gt;&lt;a rel="nofollow" target="_blank" href="http://docs.google.com/a/jfrog.org/File?id=dc885b7m_15grpnpzc2_b"&gt;&lt;/a&gt;&lt;br&gt;   &lt;div&gt;&lt;br&gt;       Published Modules    &lt;/div&gt;&lt;br&gt;&lt;a rel="nofollow" target="_blank" href="http://docs.google.com/a/jfrog.org/File?id=dc885b7m_17c84b3zdv_b"&gt;&lt;/a&gt;&lt;br&gt;   &lt;div&gt;&lt;br&gt;       Builds Tab    &lt;/div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/1990156302547833748-1815546549967361900?l=blogs.jfrog.org" alt=""&gt;&lt;/div&gt;</description>
         <author>Noam Y. Tenne</author>
         <guid isPermaLink="false">tag:google.com,2005:reader/item/0022453267b30128</guid>
         <pubDate>Wed, 30 Dec 2009 20:03:00 +0000</pubDate>
      </item>
      <item>
         <title>New Whitepaper - Developing Software Collaboratively with Hudson</title>
         <link>http://blogs.sun.com/ontherecord/entry/new_whitepaper_developing_software_collaboratively</link>
         <description>&lt;p&gt;A new whitepaper - Developing Software Collaboratively with Hudson is now &lt;a rel="nofollow" target="_blank" href="http://www.sun.com/offers/details/hudson.xml"&gt;available&lt;/a&gt;&lt;/p&gt; 
  &lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://wiki.hudson-ci.org/display/HUDSON/Meet+Hudson"&gt;Hudson&lt;/a&gt; is an open source &amp;quot;continuous integration&amp;quot; (CI) server that brings a new level of efficiency and productivity to
collaborative software development. By automating the build-and-test
process, Hudson saves time, cuts errors and risks, and brings a higher
level of transparency to projects.&lt;/p&gt; 
  &lt;p&gt;The &lt;a rel="nofollow" target="_blank" href="http://www.sun.com/offers/details/hudson.xml"&gt;whitepaper&lt;/a&gt; describes the capabilities of Hudson, compares Hudson’s key
features to those of competitive offerings, and summarizes why Hudson
has quickly become the industry’s most widely adopted open source CI
server. &lt;br&gt; &lt;/p&gt;</description>
         <author>jacki decoster</author>
         <guid isPermaLink="false">tag:google.com,2005:reader/item/9bf39d1fb55c35d2</guid>
         <pubDate>Tue, 01 Dec 2009 17:53:15 +0000</pubDate>
      </item>
      <item>
         <title>Links for 2009-11-13</title>
         <link>http://janmaterne.wordpress.com/2009/11/13/links-for-2009-11-13/</link>
         <description>Today I found two tools for testing: Byteman and YouDebug. While I haven’t have a deeper look at Byteman I realized that YouDebug is writte by Kohsuke Kawaguchi. And it is very funny to recognizing him after Args4J and Hudson with another project. The world is small and you’ll see another every twice … or [...]&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=janmaterne.wordpress.com&amp;amp;blog=544265&amp;amp;post=228&amp;amp;subd=janmaterne&amp;amp;ref=&amp;amp;feed=1" width="1" height="1"/&gt;</description>
         <guid isPermaLink="false">http://janmaterne.wordpress.com/2009/11/13/links-for-2009-11-13/</guid>
         <pubDate>Fri, 13 Nov 2009 15:40:50 +0000</pubDate>
         <content:encoded><![CDATA[<p>Today I found two tools for testing: <a rel="nofollow" target="_blank" href="http://www.jboss.org/byteman.html">Byteman</a> and <a rel="nofollow" target="_blank" href="http://youdebug.kenai.com/">YouDebug</a>.</p>
<p>While I haven’t have a deeper look at Byteman I realized that YouDebug is writte by Kohsuke Kawaguchi. And it is very funny to recognizing him after <a rel="nofollow" target="_blank" href="http://args4j.dev.java.net">Args4J</a> and <a rel="nofollow" target="_blank" href="http://hudson-ci.org">Hudson</a> with another project. <em>The world is small and you’ll see another every twice … or more</em> <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley'/> </p>
<br />  <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gocomments/janmaterne.wordpress.com/228/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/janmaterne.wordpress.com/228/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godelicious/janmaterne.wordpress.com/228/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/janmaterne.wordpress.com/228/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gofacebook/janmaterne.wordpress.com/228/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/janmaterne.wordpress.com/228/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gotwitter/janmaterne.wordpress.com/228/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/janmaterne.wordpress.com/228/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gostumble/janmaterne.wordpress.com/228/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/janmaterne.wordpress.com/228/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godigg/janmaterne.wordpress.com/228/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/janmaterne.wordpress.com/228/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/goreddit/janmaterne.wordpress.com/228/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/janmaterne.wordpress.com/228/"/></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=janmaterne.wordpress.com&amp;blog=544265&amp;post=228&amp;subd=janmaterne&amp;ref=&amp;feed=1" width="1" height="1"/>]]></content:encoded>
         <media:content medium="image" url="http://0.gravatar.com/avatar/e965379db91e0faa68ee5c211e49118c?s=96&amp;amp;d=identicon&amp;amp;r=G">
            <media:title type="html">janmaterne</media:title>
         </media:content>
      </item>
      <item>
         <title>Using the Hudson build integration system with Rational Team Concert</title>
         <link>http://jazz.net/library/LearnItem.jsp?href=content/articles/rtc/2.0/build-hudson/index.html</link>
         <author>Jim D'Anjou, Jazz Jumpstart Team</author>
         <guid isPermaLink="false">tag:google.com,2005:reader/item/2375cfcd93b42021</guid>
         <pubDate>Tue, 27 Oct 2009 18:30:00 +0000</pubDate>
      </item>
   </channel>
</rss><!-- fe2.yql.bf1.yahoo.com compressed/chunked Fri Feb 10 10:02:26 UTC 2012 -->

