Back to blog

Deprecating non-Java plugins

Gavin Mogan
Oleg Nenashev
Oleg Nenashev
Mark Waite
Mark Waite
December 22, 2021

Deprecating non-Java plugins

10 years ago, the Jenkins ruby-runtime was first released. It was an experiment to let plugins be written in ruby but still get integrated into the main Java Virtual Machine runtime with help of JRuby. A similar extension was made to allow plugins to be written in Python but still integrated into the Java Virtual Machine with Jython.

Over the years though, the experiments are no longer being maintained and the plugins that use the non-Java runtimes take a lot of compatibility effort. In addition, the Jenkins ruby runtime does not support Java 11. Specifically, the last few years have been really hard on the Jenkins core developers, as they still have to maintain all the hacks and processes to keep the non-Java runtimes barely working. Examples of the experienced issues include compatibility with JEP-200: Switch Remoting/XStream blocklist to a permitlist where we had to allow many Ruby Runtime classes in the Jenkins core to support serialization of data.

In 2018 we discussed the future of the Ruby Runtime based plugins. There was a consensus that we want to deprecate and remove the plugins so that Jenkins users do not experience issues . Daniel Beck created JEP-7: Deprecation of ruby-runtime for that. Over the years, the functionality provided by Ruby plugins has been largely replaced by other implementations, and hence we have decided to proceed with the deprecation (discussion).

One month from now, January 22nd, 2022, the default Jenkins update center will stop distributing the Ruby runtime plugin, the plugins that use the Ruby runtime, the Python runtime plugin, and the plugin that uses the Python runtime.

What does this mean for you?

If you are one of the few users who are using the following plugins, there will be no impact on your existing instances. The only change will come for new installs. Suspended plugins will stay installed, but can not be newly installed without manually downloading releases or using custom update centers.

Jenkins plugin management tools and distributions may be affected as well if they use the default update center to download the plugins and/or their metadata. It includes but is not limited to the official Docker images, Helm charts, Jenkinsfile Runner, Custom Jenkins WAR Packager, and the Plugin Installation Manager CLI Tool. Note that all these tools allow custom update sites to be configured if required.

The lists below provide additional information about the plugins based on the Ruby Runtime and the Python Runtime. Please plan your transition away from these plugins. They will be removed from the official Jenkins update centers on January 22, 2022.

Affected plugins

Gitlab Hook

Last released 6 years ago.
Contains multiple security vulnerabilities.
Suggestion: Use the GitLab plugin and the GitLab Branch Source plugin.

Cucumber

Last released 9 years ago.
Suggestion: Use sh or bat to run cucumber from the command line.

pyenv

Last released 7 years ago.
Suggestion: Use sh or bat to run pyenv from the command line.

Rvm

Last released 5 years ago.
Suggestion: Use sh or bat to run rvm from the command line.

Capitomcat

Last released 7 years ago.
Suggestion: Install Ruby and Capistrano and use sh or bat to invoke them from the command line.

Commit Message Trigger

Last released 7 years ago.
Suggestion: Use sh, bat, or other scripts to read git commit messages and conditionally execute Pipeline steps.

Git notes

Last released 10 years ago.
Suggestion: Use sh, bat, or other scripts to run git to annotate commits.

rbenv

Last released 6 years ago.
Suggestion: Use sh or bat to run rbenv from the command line.

Chef

Last released 6 years ago.
Suggestion: Use sh or bat to run chef from the command line.

CI Skip

Last released 8 years ago.
Suggestion: Use the GitHub Commit Skip SCM Behaviour, Bitbucket Commit Skip SCM Behaviour, or SCM Skip to skip builds based on the content of commit messages. Alternately, use sh, bat, or other scripts to read git commit messages and conditionally execute Pipeline steps.

InstallShield

Last released 8 years ago.
Suggestion: Use sh, bat, or other scripts to run InstallShield.

MySQL Job Databases

Last released 7 years ago.
Suggestion: Use Jenkins Job Database Manager Plugin for MySQL.

Pathignore

Last released 10 years ago.
Suggestion: Use the path ignore features of various plugins or use sh, bat, or other scripts to read git commit messages and conditionally execute Pipeline steps.

Perl

Last released 9 years ago.
Suggestion: Use sh or bat to run perl from the command line.

pry

Last released 10 years ago.
Suggestion: Use the Jenkins groovy console and its interface from the Jenkins command line interface.

Single Use Agent

Last released 7 years ago.
Suggestion: Use cloud agents (Fargate, Azure Container Instances, Docker, etc.) to allocate agents for a single use and then release them.

Travis YML

Last released 5 years ago.
Suggestion: Rewrite the travis.yml file as a Jenkinsfile, a Jenkins Templating Engine file, a Pipeline as YAML, or a Jenkins Modular Pipeline Library.

Yammer

Last released 8 years ago.
Suggestion: Use the Yammer REST API to post messages.

DevStack

Last released 9 years ago.

Ikachan

Last released 10 years ago.

Jenkinspider

Last released 7 years ago.

Perl Smoke Test

Last released 7 years ago.

buddycloud

Last released 8 years ago.

Acknowledgements

We would like to thank all contributors and maintainers who contributed to the Ruby Runtime based plugins and the Python Runtime based plugin. We also thank those who participated in development of new plugins replacing the functionality. These contributors helped millions of Jenkins users while the ecosystem was supported over the past 10 years and it is not taken for granted. Now we need to move on so that we can keep expanding the Jenkins architecture and developers tools. We invite all contributors to participate in this effort and to help us to migrate the plugins to supported JVM-based platforms for plugins.

My instance is affected, what to do next?

If you do not use the affected plugins, the recommendation is to remove them. Otherwise, it is recommended to start migration out of the plugins to alternatives providing similar functionality.

Not all plugins have alternatives. At the moment the Jenkins core team does not plan to provide a replacement, but any contributions are welcome. If you depend on the functionality, we recommend reaching out to the community in the developer mailing list so that you can coordinate the replacement with other affected users.

About the authors

Gavin Mogan

I got started with Jenkins early on when I was just getting started with testing. I knew there had to be a way to run the tests automatically and report on them back to people. I started hacking my own tools before I came across Jenkins (then Hudson) and was hooked ever since. Over the years I’ve managed to install and configure Jenkins at various jobs, and even was employed making internal and external plugins and integrations. You’ll often find me on the Jenkins IRC and Gitter channels as well as the subreddit giving a hand to people who are stuck. I also try to get involved with Jenkins Infrastructure projects as much as I can. I currently maintain the plugin site, plugin site API, and a bunch of other minor projects. I also help run Vancouver’s chapter of Nodeschool.

Oleg Nenashev

Oleg Nenashev

Jenkins core maintainer and board member, open source software and open hardware advocate, TOC chair in the Continuous Delivery Foundation. Oleg started using Hudson for Hardware/Embedded projects in 2008 and became an active Jenkins contributor in 2012. Nowadays he maintains Jenkinsfile Runner, contributes to several Jenkins SIGs and outreach programs (Google Summer of Code, Hacktoberfest) and organizes Jenkins meetups in Switzerland and Russia. Oleg works on open source programs and Keptn at the Dynatrace, Open Source Program Office.

Mark Waite

Mark Waite

Mark is a member of the Jenkins governing board, a long-time Jenkins user and contributor, a core maintainer, and maintainer of the git plugin, the git client plugin, the platform labeler plugin, the embeddable build status plugin, and several others. He is one of the authors of the "Improve a plugin" tutorial.

Discuss