Skip to content

Open Source

Come join the infra team!

We are looking for volunteers to join the small infra team here at the Jenkins project. We are the butlers of the butler that get Mr.Jenkins going.

We've been managing our servers through puppet, and have been slowly folding pieces one at a time to puppet, but there's still a lot of snowflake services that need proper operationalization.

So to fix them up, PuppetLabs folks generously agreed to help us get going with a deployment of Puppet Enterprise. Tyler has managed to arrange a "rapid deployment" engagement. To kick start the effort, an instructor would come for one week (April 28th-May 2nd) to bring us up to speed on modern Puppet. we'll then spend some time on our own to puppt-ize more, and deploy Puppet Enterprise.

The end goal is to ensure sustainability of our infrastructure, in case of unexpected server loss.

As we are about to get this effort going, we think this is a good time to solicit a few more volunteers. We are looking for someone who could join this two week engagement in San Francisco, and keep their involvement beyond that. This is a part time volunteer work, and you'd get some visibility and exposure to the inner guts of open-source projects, not to mention the satisfaction of getting thanked for your work.

If you are interested, please drop us a note at the infra list.

Categories: Open Source

Active Directory plugin improvements

One of the few plugins that I still personally maintain is Active Directory plugin. In the past few months, I've been making steady improvements in this plugin, thanks to various inputs and bug reports given to me from the ClodBees customers.

One of the recent fixes was to get the "remember me" feature finally working for Active Directory. This requires a relatively new Jenkins 1.556, but it eliminates the need to having to constantly type the password in.

Then I've rebumped the version of COM4J, which was causing a thread leak when Jenkins runs on Windows. If you are running a Windows deployment with lots of active users, this probably would have contributed to the instability of Jenkins.

And then lastly, a small but crucial improvement was made to the way we search group membership, so that we can avoid recursively searching AD. This should result in a significant speed improvement when you are logging into Jenkins through AD.

The latest version of the plugin as of writing is 1.37. I hope you'll have a chance to update the plugin soon.

Categories: Open Source

Upcoming Jenkins Office Hours: Acceptance Test Harness

One of the new efforts in Jenkins this year is the acceptance test harness for Jenkins.

We will be doing the Jenkins office hours next week to go over this and sync up and coordinate between people in the community that are trying to work on this.

It'll be April 23rd 11am PT (see what this time is in your time zone) on Google Hangout at If you are intereste in hacking Jenkins or if you are a large user of Jenkins who have acceptance tests, we are looking forward to seeing you there.

For those of you who haven't looked, this test harness allows you to write blackbox tests of Jenkins and its plugins. It was originally used to test LTS releases, but over the time, it acquired a number of features, such as ...:

  • Docker support for launching complex fixtures to test Jenkins with.
  • Pluggability to launch Jenkins under test (JUT) in many different environments
  • Pluggability to provision Jenkins and slaves from EC2 to test large deployments
  • Choice of cucumber or JUnit to write test scripts

We are working on porting over existing test cases, but we'd like to work with users to move their acceptance tests on top of this same harness. The idea is to pool those test cases in the community so that we can test Jenkins and its plugins as we develop them. For this to work, we want tests to have lots of metadata (such as what plugins it touches), and for the harness to have sufficient modularity that different people can run the same scenario against different deployments, including existing instance.

Categories: Open Source

SonarQube 4.2 in Screenshots

Sonar - Tue, 04/15/2014 - 08:07

The team is proud to announce the release of SonarQube 4.2, which includes many exciting new features:

  • Multi-language analysis
  • Tags of rules
  • New visual measure filter representations (bubble chart, pie chart and histogram)
  • Improved Issues page

Multi-language Analysis

The most voted JIRA ticket ever is now fixed! Running an analysis on a multi-language project is now rather simple. Just point to the parent directory containing all the source code and that’s it. Then, from the very same place, you can browse issues on all your files whatever their language.

Tags of Rules

Thanks to the tagging mechanism, you can now classify coding rules, which should ease searching.

New Visual Measure Filter representations

Bubble chart, pie chart and histogram are now available to display your filters in nice and meaningful ways.

Improved Issues Page

The Issues page was redesigned to make it easier to search for and browse issues.

That’s all, Folks!

Time now to download the new version and try it out. But don’t forget to read the installation or upgrade guide.

Categories: Open Source

Jenkins 1.532.3 LTS is released

The final LTS release of the 1.532.x line is out today. You can download it from the usual location. Changelog is here.

Starting with the next 1.554.x LTS, the release model will switch to the train model, where we commit to dates and get whatever we can ship by that date.

You can see the scheduled dates in our event calendar. Backporting window for 1.554.1 is almost closing, so if you want to have your favorite issues nominated for it, please see the process in the Wiki and hurry!

Categories: Open Source

InfoQ CI survey 2014

InfoQ has been running a CI server survey for more than a month now, and here is the current result:

Jenkins has gotten more than 70% of the votes, once again proving the wide adoption among developers. If you are one of those who picked Cruise Control into the "considering" section, I'd encourage you to look around a bit more.

You can still vote from their website or leave comments if you want.

By the way, the design of two axes make no sense to me; for example, I'd order the adoption axis to "considering -> migrating to -> using now -> moving away from", and the circle seems to imply two axes are somehow interchangeable, when it should probably be just in a checkerboard to indicate those are independent axes.

Categories: Open Source

More scalable slaves


NIO-based Java Web Start (JNLP) slave handling is coming to 1.560. This will help you run a large number of JNLP slaves more efficiently. A connected JNLP slave used to occupy one thread on the master, but now it occupies none. Combined with the earlier change that eliminated threads from idle executors, now you can connect thousands of slaves.

All you have to do is to use the latest slave.jar from Jenkins 1.560. No other changes are necessary on users' part.

A bulk of this is implemented in remoting 2.38, and a good part of it was implemented about a year ago on the airplane on the way to Europe.

We plan to make CLI connections take advantages of this too, which helps those who use that a lot. That's not in 1.560, but hopefully it'll be in the near future. This change also paves a way for multi-participant bus-topology communication, which I think would be an useful building block for the work-in-progress master-to-master API.

Categories: Open Source

At Long Last, SonarQube Is a True Polyglot

Sonar - Wed, 04/09/2014 - 19:52

Good taste prevents me from embedding a trumpet fanfare into this post, but it does seem warranted. After all, with the release of SonarQube version 4.2 last week, SonarSource has finally implemented the all-time highest voted ticket in the SonarQube backlog: multi-language analysis.

Now, at last, you’ll be able to see the Java or C# in your web project side by side with its JavaScript and HTML. Finally, without the Views plugin, you can see aggregate measures across the multiple technologies in a single project for a unified quality assessment. Cue the angel choir.

Okay, now for a tiny dose of reality. The ability to participate in a multi-langauge analysis must be implemented in each language plugin separately, so it may be a while before your project is fully inspected with just one analysis. But very soon you’ll be able to remove the sonar.language property, and SonarQube will automatically analyze every file with an extension it recognizes.

Actually, if even one of the languages in your project already supports multi-language analysis, you can go ahead and drop the sonar.languages property and SonarQube will do its multi-language thing as much as it can. Multi-language analysis has already been released in Android, Flex, Groovy, Java, JavaScript, PHP, PL/SQL, and RPG. It’s scheduled for ABAP, C/C++, C#, COBOL, PL/I, Python, VB6, and VB.NET.

Of course, if you don’t want to turn on multi-language analysis yet, then all you have to do is retain the sonar.languages property, and you’ll get the legacy behavior: analysis only of the single language you specified.

Categories: Open Source

Maven job type performance improvements in Maven plugin 2.2

I recently had an opportunity to visit a big Jenkins user on site, and one of the things they've told me is that building projects in the Maven job type is substantially slower than doing the same with the freestyle project type.

This is partly expected, because this job type does more for you. For example, it automatically archives your build artifacts, fingerprints all the relevant information, and so on. These are good things, and naturally, it cost time.

But the slow down they are seeing was substantial, and this is a complaint I've heard from others as well. So I started looking into it.

With a help of artificial delay induced to my network interface and several custom scripts to probe into the running processes, I was able to understand what was going on and make some good improvements.

First, in Maven plugin 2.0, we've made a change in the way we archive artifacts from Maven. Previously, the artifacts were copied between the master and the Maven JVM, and for a reason I'll mention later, this was very slow, especially in a network that has a large latency. With Maven plugin 2.0 and onward, artifacts are archived between the master and the slave JVM.

The second problem that I discovered was that the spy program we put inside Maven is causing excessive amount of unnecessary classloading. Some classes have static initializers that too eagerly refer to other classes, which in turn brings in other classes, and so on. Despite the jar file caching that we do, these classloading still sometimes requires precious roundtrips to the master, which costs in the order of 10s of ms. I was able to make various changes in Jenkins core to cut this down, and these fixes will land in Jenkins 1.559 (ETA is April 14th.) The classloading overhead is independent of the size of your Maven build, so this improvement is more for people who have lots of small Maven builds, like Jenkins building Jenkins plugins.

Now, on to the biggest fruit of this investigation I was able to discover and fix. Imagine the Maven JVM has a lot of data to send to the master, say you are archiving test reports or code coverage report. A good implementation would send these data as fast as ppossible to the master, paying respect to the limit of flow control to avoid overwhelming the master.

It turns out that the way we set up this communication channel was far from optimal. Instead of having the Maven JVM push data with flow control, we were relying on the master to pull data. That is, master has to send out a request to the slave to fetch the next batch of data (8KB), then once it receives that data, it sends out another request to fetch the next batch of data, and so on. If your network latency is 10ms, this scheme only lets us send 500KB/sec, even if you have a gigabit ethernet. No wonder it was so slow!

This fix is in in Maven plugin 2.2. See JENKINS-22354 if you want to know more about the actual diffs and such.

Unfortunately, none of these are available for those who are on 1.532.x LTS, but the next 1.554.1 LTS will be able to run the newer Maven 2.2 plugin. So the help is on the way!

Categories: Open Source

Your Java Web Start slaves will be always clean

If you have slaves that connect through Java Web Start (such as slaves installed as Windows services), we have a good news for you.

In case of a connection loss, this type of slaves has been designed to automatically attempt to reconnect to the master. This makes sense because you want these slaves to remain online all the time, even if your janitor trips over the ethernet cable. Unfortunately, it also means that over the time, these slaves accumulate gunk, such as mutated static states, any left-over threads or memory leaks, or native libraries that are loaded into JVM.

To prevent that, a better approach is to restart the slave JVM (JENKINS-19055) and have the new JVM reconnect, instead of having the same JVM reconnect. That would ensure that the slave always stays clean. I've planned to make this change for a while now, and I'm happy to report that this change is finally landing to the upcoming 1.559.

Restarting JVM is easy on Unix, where I could just exec(3) to itself. We've been doing this for ages on masters, for example when you update a plugin and tell Jenkins to restart.

The hard part is to do this for Windows, where the most of the time was spent. I had to improve windows service wrapper to support self-restarting services, which turned out to be trickier because Windows service control manager doesn't provide "restart" as an atomic operation. It also kills not just the service process itself but all the processes in the group. So I had to double-fork the service wrapper into a separate process group just to restart a service from within itself.

In any case, the end result is that if you have installed a service through GUI, be it on Windows, Unix, or OS X, slaves will restart themselves every time it gets disconnected from the master.

I've also taken the opportunity to make jenkins-slave.exe on the slave self-updating. Every time it connects to the master, it gets the latest version from the master.

If you have installed Web Start slaves as services, make sure to update the local copy of slave.jar on these slaves to 2.37 or later. This "restart on reconnect" feature only kicks in when you are running this very recent version of slave.jar. And yes, we realize it'd be nice for slave.jar to update itself, which is tracked as JENKINS-22454. But that's a work for another day.

Categories: Open Source

Call for Sponsors: 2014 Jenkins User Conferences

Jenkins User Conference (JUC) season is upon us! It’s a busy year for the Butler – he’s hosting conferences all over and looking for sponsors to help:

  • Boston – June 18
  • Berlin – June 25
  • Herzelia, Israel – July 16
  • Bay Area (California) – October (date TBD)

Mr. Jenkins and the JUC Organizing Committee want to invite you and your company to sponsor a JUC this year. Show your support for the Jenkins community and help keep costs low for attendees*. The funds go to are put to good use: conferences are two full tracks. Lunch, light breakfast, coffee and a coveted Jenkins t-shirt are also included.

Sponsors get all sorts of thanks from the Jenkins community:

  • Your logo on the conference t-shirt and all other conference communication (emails, website, signage, etc.)
  • A blog featuring sponsors
  • Free passes
  • Silver and Gold sponsors get a table to talk to folks and hand out swag
  • Gold sponsors get either a speaking slot, happy hour sponsorship or a dedicated room for demos
  • And more, but most especially, you get to support JenkinsCI.

Just let us know if you’re interested to get the details. We’d love to have you join us.

Friendly reminder: We are looking for speakers for all four cities. Call for Papers ends March 30 for Boston, Berlin and Israel. Submit your abstract now and come share your expertise with the Jenkins community.

We hope to see you at a JUC this year!

Lisa, Alyssa and the JUC Organizing Committee

*PS - Registration just opened for Boston and early-bird tickets are only $59.

Categories: Open Source

Ducks Make It Look Easy Too

Sonar - Thu, 03/20/2014 - 09:57

Since I joined SonarSource full time at the beginning of this month, I’ve been thinking a lot about ducks and belly dancers.

That seems like an odd combination, but they have more in common than you might think. Most people have heard the old saw about being like a duck: stay calm on the surface and paddle like hell underneath. It’s pretty much the same for belly dancers; those big, poofy pants (or skirts) they wear aren’t simply a fashion statement; they’re intended hide how hard the dancer’s legs are working in the process of making the rest of the body move.

It’s pretty much the same story for SonarSource. As a member of the SonarQube community, and even as a part-timer at SonarSource, I had no idea how much work goes into each new version of SonarQube and the language plugins. Having spent the first two weeks of this month at the La Roche office, I’m beginning to understand.

As a community member, I was concerned mainly with SonarQube itself and the language plugins I used every day. Wearing the blinders of that narrowed focus, it always seemed like a very long time between releases. With the blinders off, and seeing more clearly everything that goes on, I’m astounded by how often new versions go out the door. From November through January, there were 18 major releases, and that doesn’t count the sort of internal refactoring that will make it easier to continue pumping out high-quality code in the future.

What I saw in Jira and on the mailing lists is the above-the-water portion of the duck (or the above-the-legs portion of the dancer, depending on which metaphor you prefer). What’s going on underneath is an incredible amount of testing (manual and automated), test maintenance, management of milestones and RC’s, and yes monitoring and improvement of quality.

As a community member, I had noticed how few real issues are turned up for each new release candidate. I had also noticed that sometimes RC1 of a new version isn’t the first release candidate to be announced to the community for testing. The exhaustive tests that SonarSource itself performs mean that most issues are caught internally before the community ever sees a new version – often in the milestone phase, but sometimes in the release candidate phase.

That’s because the focus at SonarSource is not just making quality monitoring software, but making quality software. Making it look easy is just a byproduct.

Categories: Open Source

Jenkins User Conferences This Year

Over the past three years, the Jenkins User Conference is held annually in the Bay Area with a few events in different locations around the world. The Jenkins User Conference has established a reputation as a focal point for the Jenkins community to come together to share new ideas and best practices. Each year we have experienced the growth and expansion within the Jenkins community. This year we are taking this platform to other regions of the world, offering regional gatherings of Jenkins users and developers.

At the moment, we are working on the following JUCs and events for 2014:

  • JUC Boston - June 18
  • JUC Berlin - June 25
  • JUC Israel - July 16
  • JUC San Francisco Bay Area - October (TBD)
  • JUC Australia/New Zealand - November/Dec (TBD)

Jenkins Events

  • Copenhagen - September
  • Brazil - November/December (TBD)

There are a few different ways to get involved:

Learn more:

Looking forward to seeing you at a local JUC near you! :o)

Categories: Open Source

Test the Untestable! We Dare You Not To!

The Typemock Insider Blog - Mon, 03/17/2014 - 14:43
Don’t miss the opportunity to learn from one of the world’s leading unit testing expert! This Wednesday (March 19), Typemock founder Eli Lopian will host a special live webinar on how to test legacy code with ease and elegance.  Did you know that legacy code maintenance is the #1 problem for developers. This is what they reported:  Working […]
Categories: Open Source

How to Master TDD and Become a Star Developer

The Typemock Insider Blog - Mon, 03/10/2014 - 15:48
Test-driven development (TDD) is not something that happens “by accident”.  Sure, at first the idea might seem simple enough (theory always is…) – but real-life implementation could take considerable time. TDD’s learning curve has very few shortcuts: it requires training, hands-on practice, self-discipline and patience.  This is why only the very best actually get to the top. […]
Categories: Open Source

Apparently, Grumpy Cat is Not Unit Testing!

The Typemock Insider Blog - Sun, 03/09/2014 - 13:37
You can relate? Learn how to turn this around! Secure your spot now! 
Categories: Open Source

TDD is Agile’s Super-hot Friend!

The Typemock Insider Blog - Fri, 03/07/2014 - 14:40
Let us make the intro – we know you’ll be a great match! Yep, test-driven development (TDD) is the heart of agile methodology, so much so that some say you can’t have one without the other. But, as you probably know by now, TDD is not something you just “pick up along the way”. It […]
Categories: Open Source

Why Unit Testing Sounds Great in Theory, But Fails in Practice? Learn How to Turn This Around!

The Typemock Insider Blog - Tue, 03/04/2014 - 23:47
Does this sound familiar: - Read books or seen tutorials about unit testing and the idea looked simple enough? - Tried to implement what you saw on new code, or worse: on legacy code, and it didn’t go as smoothly as you thought it should? - Spent too much time writing tests, and your boss […]
Categories: Open Source

SURVEY: 85% of Developers Unit Test [INFOGRAPHIC]

The Typemock Insider Blog - Tue, 03/04/2014 - 11:00
85% of developers unit test, as discovered by a recent survey conducted by Jared Brown (@jaredbrown; CTO and Co-Founder at Hubstaff).      Courtesy of: Hubstaff – Simple, Reliable Time Tracking You can read Jared’s full post right here. In another post, Jared explains the  the 3 main reasons every developer should unit test: (1) Know if your code *really* […]
Categories: Open Source

Measures, at your Service!

Sonar - Thu, 02/27/2014 - 11:11

If there’s a set of data you regularly look up in SonarQube, the Measures Service – and saved filters – are going to be your new favorite SonarQube features.

A user at my day job recently showed me a spreadsheet he’s using to track the metrics of the “worst offender” files in his COBOL project. I was afraid I already knew the answer, but I asked how he was getting the data for each file. It was one time I wasn’t happy to be right – he was doing it the hard way, manually recursing each branch of his project’s components tree to find the numbers.

That’s when I pointed him to the Measures service. It lets you search for any type of resource based on a host of criteria. He was looking for files in his project that exceeded a certain threshold. This doctored screenshot shows the kind of search I showed him how to run:

First he specified what he was looking for: files, and then the criteria by which to choose them: Components of the project, SonarQube in this case, with Coverage less than 90%. Just having the list of relevant files pulled neatly together thrilled him; I could tell by the way the corner of his mouth quirked up.

Then it was a simple matter to edit the column set to show what he wanted to see:

His mouth quirked again. He was really happy. Except…

We both started to speak, but he beat me to the gate, “Can you save…?” I knew he didn’t want to have to reconfigure this every time – who would?

I had him close column editing mode (a crucial step), and the “Save As” link reappeared:

He gave it a name, and knew that from then on, it would always be waiting for him in the saved filters menu:

I got the mouth quirk again.

Then, I showed him how to use a “Measure Filter as List” widget on his own private dashboard to display the saved filter automatically, and pointed out that he could make that dashboard the first page he saw in SonarQube.

He actually smiled.

Categories: Open Source