Skip to main content

Hudson 1.104 and Jabber plugin

Posted by kohsuke on April 22, 2007 at 4:33 PM PDT

I just posted the Hudson 1.104 release. It's been a while since 1.103 — that is, 5 days — so this release contains a large number of changes.

A large portion of the work is related to the native maven2 integration.
For example, starting this version, Hudson automatically puts the build number and Hudson project name into the jar/war/ear files that are created in Maven. This is often very useful when you need to track down what's being run where. For the complete list of changes, see the changelog.

As usual, big thanks to all the users who have reported issues and tried snapshot builds for verifying fixes.

I also posted the Jabber plugin for Hudson on behalf of Uwe Schaefer. It sends out build notifications over Jabber. See his release announcement. The amazing thing, as he also noted, is that just a few days after the soure code of this plugin is committed to the CVS repository, another guy, Pascal Bleser, came along and added a boat-load of features. His announcement is still not archived, so here goes the e-mail:

Hi all

I've spent some time this week-end to enhance the Jabber notification
support that's in CVS (thanks Uwe Schaefer's work on the initial
version, adding features was pretty easy -- I also looked up some stuff
in Renaud Bruyeron's IRC notification plugin code).

Added the following features:
- - configure Jabber IDs for users (same as for email addresses)
- - optionally sends failed build notifications to the last commiter(s)
(who probably broke the build) [enabled/disabled per job]
- - optionally sends notifications to commiters who fixed a build (when a
job changes state from FAILED to SUCCESS) [enabled/disabled per job]
- - optionally send notifications when builds start [enabled/disabled
per job]
- - configure the notification strategy [configured per job]:
* always notify
* always notify on failures
* only notify on state change
(this was already implemented by Uwe with a strategy pattern, just not
made configurable yet)
- - a bot for Jabber GroupChat rooms, accepts the following commands (the
command prefix is configurable (system-wide), defaults to "!"):
* !status or !jobs or !s: shows the current status of all jobs (SUCCESS,
FAILED, ...)
* !queue or !q: shows the state of the build queue (lists the items)
* !schedule <jobname>: same as "build now" in the web UI for the
specified job
* !schedule <jobname> now: schedules an immediate build, ignoring the
quiet period (implemented with a really dirty hack, until bug #356 is
fixed [1])
* !schedule <jobname> <n>h|m|s: schedules a build with a custom quiet
period, speciifed in hours, minutes or seconds
* !build ...: same as !schedule ..., with one difference: !build
<jobname> ignores the quiet period (same as "!schedule <jobname> now")
* !help: lists the available commands (commands are easy to implement,
just a simple command pattern)
- - configure which group chats to join on startup (with a bot in each)
[configured system-wide]
- - added support for sending build result notifications to group chats
(Uwe implemented it for individual Jabber IDs (users) "only")
[configured per job]

I still have to review and possibly refactor the code a little but it
seems to work quite well (tested with Openfire aka Wildfire 3.3.0 [2])

[1] https://hudson.dev.java.net/issues/show_bug.cgi?id=356
[2] http://www.igniterealtime.org/downloads/index.jsp
The
code is available here:
http://linux01.gwdg.de/~pbleser/files/hudson/jabber/jabber-src.tar.gz
(it's the content of "hudson/plugins/jabber/")

License: same as Hudson (MIT if I'm not mistaken)

And here is the packaged plugin:
http://linux01.gwdg.de/~pbleser/files/hudson/jabber/jabber.hpi

Two "nasty" things that should probably be fixed:
1) it uses reflection and setAccessible(true) to retrieve the private
Set<Item> field of Queue in order to schedule a build without the quiet
period (see BuildCommand.scheduleBuild())
2) the changes break potential compatibility with the IRC plugin's
IMPublisher class (from the comments in the source code, it seems Uwe
intended to contact the IRC plugin developer to share common interfaces)

Would be nice if someone could review the code (especially Uwe), and if
I (or someone else) could commit it into CVS.

That being said, thanks a lot to Kohsuke and everyone involved for the
great work as well as to Uwe Schaefer for the grunt work on Jabber support.
It's really fun to code against Hudson's nice domain API  :)

Finally, Michal Mocnak seems to be making more progress in the NetBeans plugin for Hudson. He has sent me some e-mails with a screenshot, so stay tuned for more developments there. And if anyone knows how to write an Eclipse plugin or an IntelliJ IDEA plugin, join us and we could have some real fun.

Hudson just keeps getting more and more fun to work on.

Related Topics >>