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 vulnerabilties.
Suggestion: Use the GitLab plugin and the GitLab Branch Source plugin. - Cucumber
-
Last released 9 years ago.
Suggestion: Usesh
orbat
to runcucumber
from the command line. - pyenv
-
Last released 7 years ago.
Suggestion: Usesh
orbat
to runpyenv
from the command line. - Rvm
-
Last released 5 years ago.
Suggestion: Usesh
orbat
to runrvm
from the command line. - Capitomcat
-
Last released 7 years ago.
Suggestion: Install Ruby and Capistrano and usesh
orbat
to invoke them from the command line. - Commit Message Trigger
-
Last released 7 years ago.
Suggestion: Usesh
,bat
, or other scripts to read git commit messages and conditionally execute Pipeline steps. - Git notes
-
Last released 10 years ago.
Suggestion: Usesh
,bat
, or other scripts to rungit
to annotate commits. - rbenv
-
Last released 6 years ago.
Suggestion: Usesh
orbat
to runrbenv
from the command line. - Chef
-
Last released 6 years ago.
Suggestion: Usesh
orbat
to runchef
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, usesh
,bat
, or other scripts to read git commit messages and conditionally execute Pipeline steps. - InstallShield
-
Last released 8 years ago.
Suggestion: Usesh
,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 usesh
,bat
, or other scripts to read git commit messages and conditionally execute Pipeline steps. - Perl
-
Last released 9 years ago.
Suggestion: Usesh
orbat
to runperl
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.