MMS • RSS
The Jenkins project team has decided to split its efforts between focusing on stability issues and on better support for running on platforms like Kubernetes. The former which will potentially have backward-incompatible changes will impact the release model and provide a more preconfigured installation, whereas the latter will work on similar lines as the existing Jenkins X project.
Jenkins at present can be unstable in terms of handling large and complex pipelines. Some deployments require frequent restarts due to resource issues and plugin upgrades, writes Kohsuke Kawaguchi, creator of Jenkins and CTO of CloudBees. The configuration can be brittle, and plugin management as well as changing settings for build jobs can have implications which are not immediately visible. System administrators are hesitant to make changes to avoid breakages. The end user experience is complicated because Jenkins needs too many components to be configured to get anything serious done. The speed of Jenkins development itself is constrained by not having sufficient test coverage. Contributions from both new and existing developers are affected due to long drawn reviews, which can discourage future contributions.
One part of the proposal attempts to address these issues by changing the release model and taking a stand on preserving backward compatibility. At the Jenkins World 2017 Contributor Summit, Kawaguchi had demarcated the aspects of Jenkins that should work out of the box and those that need administrator configuration. The latter includes setting up HipChat/Slack integration, Webhook integration, and system-wide settings like SMTP for email notifications. He also proposed that part of the solution is “to embrace core and a bunch of important plugins together as the foundation” so that Jenkins can come pre-configured with them and reduce the setup time. The Jenkins 2.0 model will continue but might introduce changes that break backward compatibility.
The proposal for cloud native Jenkins, to be driven by the Jenkins Cloud Native SIG, is about running Jenkins on cloud native platforms like Kubernetes. The Jenkins X platform, an existing project in this direction, uses Jenkins as the core engine with an additional tool set. Kawaguchi says that the future for cloud native Jenkins is to go in a direction that makes it easy for Jenkins X. This version of Jenkins will most likely have a fundamentally different architecture – various pieces of functionality as separate microservices, using functions as a service instead of the build workers of today, and services interacting through Kubernetes custom resources. Data that is currently stored on the filesystem will be moved to cloud storage services. The Jenkins Configuration as Code (JCasC) project attempts to solve some of the configuration issues with a declarative configuration for a Jenkins master node. In addition, the Jenkins Evergreen project “provides the end-user with a pre-assembled collection of pieces that can be immediately used to implement CI and CD workloads”. Evergreen has the capability to update itself automatically. These two will be key pieces of the cloud native initiative. Other CI solutions like Gitlab CI have integrations with managed Kubernetes services.
Jenkins X enables microservices deployments on Kubernetes with its concept of Environments, which represents a collection of services from a given point in the source code repository that work together. An Environment can be created for Dev, Staging and Production or any other release stage. Environments are mapped to Kubernetes namespaces. Jenkins X provides a command line tool called jx that can be used to manage the environments, switch between them and and upgrading the Jenkins platform itself. It currently runs on MacOS and Linux, and supports the major cloud providers like AWS, GKE and Azure.
Although some users feel that these efforts are too late, considering the number of other CI tools which have similar support, Jenkins has a large user base and it will potentially benefit them as well as new users.