Learning plugin development by improving the LIFX notifier plugin
This is a cross post by Veaceslav Gaidarji, open source developer and contributor to the Jenkins and Bitrise projects. |
Some time ago I encountered a LIFX smart bulbs. These are the bulbs with a chip inside - 50% bulb, 50% chip. There are mobile applications for easy configuration and remote control of the bulb. Nothing special here, it simply works and is very convenient to have such bulbs in dormitory.
Brilliant idea time
99% of ideas which come to our minds either were already implemented by someone else or they are useless.
And as it always happens, the developer inside me generated an idea which, as it always happens, was implemented by someone else already.
The idea was: to connect a LIFX bulb to Jenkins server and update the color according to a job’s state.
Before starting to work on such Jenkins plugin, I searched for similar projects on Google and the first links pointed me to existing LIFX notifier plugin and a blog post from Michael Neale who created the plugin. Michael’s post describes exactly what I had in mind.
At this point I had 2 options:
-
forget about building something new and just use the plugin
-
improve existing plugin
First option is always easy and effortless, but second one is more challenging.
Improving an existing plugin
The existing LIFX notifier plugin did its job really well and I was able to connect my bulb to Jenkins and test it. But it wasn’t complete and had no configurable at all, therefore no possibility to change the colors.
First, I read Jenkins contribution guidelines, which encourage developers to improve existing plugins (if any) and not create other versions of plugins with similar functionality. Then I contacted the plugin author, Michael Neale, via email and kindly asked for the contributor access in GitHub for the existing plugin version. After a short discussion about my plans on this plugin, Michael added me as a contributor to GitHub repo and wished me good luck. Thanks Michael!
I wanted to improve the LIFX notifier plugin to add the ability
customize the colors (in progress
, build success
and build failure
). This
is not a hard task actually.
A 1000+ plugins were
developed for Jenkins by the hackers like me, which means that I should have no
problem to do it as well.
Fortunately for me, I have used some plugins already which had a UI similar to
that I had planned to add to the LIFX notifier, such as:
-
HockeyApp plugin
-
Fabric Beta publisher plugin
-
Different Build notifiers plugins
Reviewing the code for these plugins, plus Jenkins plugin development documentation, and of course looking over Jelly components helped me to:
-
Better understand the Jenkins architecture.
-
Learn how Jenkins plugins work in general.
-
Learn how to create the UI components for a plugin.
-
Learn how to subscribe to Jenkins job state changes using appropriate extension points.
In a few weeks I’ve finished my plugin modifications and added unit tests for
its major parts. As a result, the plugin now has a UI configuration section in
Post-build Actions
which is self descriptive:
The last step was to prepare new plugin version and publish it to the world! The Jenkins "Hosting plugins" document describes step by step process of how to publish a plugin.
This includes many steps which should be respected very carefully. |
What I’ve learned
It was my first experience in Jenkins plugins development. I should say that
steep learning curve is high enough, and sometimes is really hard to find
answers on appearing questions. But in general it’s all about Java
, XML
,
Maven
and it’s a lot of fun developing Jenkins plugins.
Check out the LIFX notifier page for more information about the latest releases!
Bonus: bitrise.io users, I’ve developed step LIFX notifier for bitrise as well.