JenkinsCI

Building Jenkins plugins with Gradle

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 Gradle!

See the wiki 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.

Holiday appeal: please help Jenkins pay the project expense

As we approach the holiday season, which is when people start to feel more charitable, at least in the U.S. So I'd like to make one more plea, that the Jenkins project needs your help in paying its expense, and that we are still about $1000 shy of the goal we need to get to. So if you can, please help us by donating to Jenkins via SPI.

Think about all the benefits you are getting from your Jenkins, and think about all the volunteer efforts that went into it. Some help by writing code, some help by answering other users questions, and some help by spreading words about Jenkins. If you've been wanting to contribute to the project but you haven't figured out how, this is one way to do it.

As a thank you, I'm writing a special "friend of Jenkins" plugin that I'd like to send out to those who have donated, so that you can show off your support on your Jenkins instance.

Once again, please help us reach our fundraising goal.

Jenkins Community Survey

There's currently a survey running to get a better sense of our use base. Those inputs help us steer the effort wisely, so we appreciate your taking time to fill it in. The result would be more useful if larger number of people participate, so feel free to encourage others to fill it in as well.

In the same spirit of the fundraising drive in NPR, CloudBees is throwing in a "thank you gift" of AppleTV as an added incentive. See their blog post for more details.

2011 Donation Drive

Since the end of April, Jenkins has been officially part of the SPI (Software in the Public Interest), an umbrella organization which offers a useful level of legal status for the project.

Up until recently we had not taken proper advantage of this new legal umbrella, thankfully that's changed as we're now capable of accepting donations!

For the project this is a big step forward as it will allow us to offset the cost of servers for the project, bandwidth, SSL certificates and other costs incurred as part of running such a large open source project.


Trivia: The machine that this page is being served from originally started out as "hudson labs", purchased and colocated by abayer, kohsuke and myself.



Since we're now able to accept donations, we're kicking off a donation drive to help recover some of the costs incurred this summer (which I've discussed previously). Our immediate goal is to raise $5130 to recoup bandwidth costs, if you can spare some change, head on over to the SPI online donation page and help us out :)

JRuby Branch merged!

Yesterday, Kohsuke announced that the 'jruby' branch of jenkins-core had been merged to master.

This doesn't mean that we're done and that you can go forth and write pure ruby plugins... not by any stretch of the imagination. Instead, what it does mean, is that the Jenkins mainline is much more friendly to runtime analysis of classes with which it is not familiar.

The problem

When analyzing plugin classes, Jenkins uses just about every kind of metadata you can think of to get information about them: Class name, Field names, method names, member modifiers, annotations, you name it. It even uses the containing class relationship for inner classes to match Descriptors with what they describe.

It's all a great example of convention over configuration (CoC). In fact, I've never really seen CoC implemented in a Java project before as successfully as it has been in Jenkins. Plugin authors don't have to duplicate any metadata that Jenkins can figure out for you -- and it's alot! The drawback though, is that extensions depend very heavily on conforming to the structure of a conventional Java class.

The changes in this merge, and in several of the modules on which Jenkins depends, allow more than ever to get this information by asking an object directly rather than querying its private class structure.

The Kicker

Many of theses changes aren't even JRuby specific! While they do enable JRuby integration, They're really just making things more friendly for dynamic languages in general. So, in theory, it should pave the way for others like JavaScript and Python.

Where now?

We're still working on the ruby runtime and tools which will provide as crisp a Ruby development experience as we can. I don't want to proffer an estimate of when those will begin to be useable, but it is important to mark this very important milestone and explain what it does and does not mean.

We need you!

There is still much work to be done to enable a writing Jenkins plugins in Ruby, we are looking for people who know Ruby and feel like pitching in: writing Rake tasks, improving the glue layer, documentation, etc.

If you're interested, most of the action is happening on the jenkinsrb@googlegroups.com mailing list, so join us!