Jenkins Essentials: five minutes, five clicks

    Jenkins Essentials has been renamed to Jenkins Evergreen since this was written.

    In his presentation at the 2017 Jenkins World Contributor Summit, Kohsuke challenged us to continue the work started with Jenkins 2 of making Jenkins easier to install and easier to use. "A user should be successful with Jenkins in under five minutes and five clicks." At that same Contributor Summit, a few of us discussed the idea of a distribution which had "batteries included", which Andrew proudly named "Jenkins Essentials." At the time I was certainly not as excited about the project as I am now, I thought to myself "we built a Setup Wizard in Jenkins 2, nobody needs a Setup Wizard++."

    Jenkins Essentials

    As Kohsuke and I continued to discuss the idea, more and more ideas came up. Towards the end of 2017 the picture became much clearer: Jenkins Essentials would be a comprehensive, low-maintenance distribution to help new and existing users be successful with Jenkins, without needing to be Jenkins experts. This will of course not replace the existing distribution of Jenkins core and its plugins, which allow many of us large amounts of flexibility, but rather it will make Jenkins easier for users who don’t want to "build it themselves."

    The more I thought about it, the more excited about the idea I became: Jenkins Essentials could open the door to new improvements and features in Jenkins which had been left in the "idea and design" phase going back almost two years! Really, I checked, some of the concepts adopted into the design of Jenkins Essentials were first conceived of in early 2016!

    Kohsuke briefly discussed the project in his previous blog post but in post I wanted to expand on what Jenkins Essentials is, and our progress has been in its development.

    What’s in Jenkins Essentials

    A few months ago I prepared this presentation for the FOSDEM 2018 Jenkins Contributor Summit, which outlines the following "pillars" or Jenkins Essentials, which are also described in JEP-300:

    Automatically Updated Distribution

    In order to provide an easier-to-use and easier-to-manage Jenkins environment, Jenkins Essentials will be distributed as an automatically self-updating distribution, containing Jenkins core and a version-locked set of plugins considered "essential." Rather than attempting to mirror the existing Weekly and LTS release lines for core, plus some plugin version matrix, Jenkins Essentials will update in a manner similar to Google Chrome.

    This automatically updating distribution will mean that Jenkins Essentials will require significantly less overhead to manage, receiving improvements and bug fixes without any user involvement. From the user perspective, their Jenkins will appear to automatically improve over time.

    There is really interesting work being pioneered by Baptiste Mathus with JEP-302 to ensure that these automatic upgrades can be performed safely.

    Automatic Sane Defaults

    Providing a core along with "essential" plugins is a good first step to helping Jenkins users successfully automate their CI/CD workloads, but requires additional "smoothing" over some of the numerous options and configurations plugins. Jenkins Essentials will perform some amount of "automatic environment-based self-configuration."

    For example, clicking a "Launch Stack" button from the Download page would launch an AWS-flavored Jenkins Essentials which, out of the box attempts to set up AWS-specific configuration with S3 and EC2 services.

    Connected

    In order to provide a more seamless experience for end-users, and ensure that Jenkins project developers receive useful error and usage telemetry to drive further improvements in Jenkins, Jenkins Essentials must necessarily be viewed as a "Connected" application. This means some yet-to-be-specified number of server-side applications to coordinate updates, receive and process telemetry, broker 3rd-party service authentications, relay webhooks, etc.

    Obvious Path to User Success

    The final pillar in Jenkins Essentials, is to ensure that Jenkins provides an obvious path for a user to configure and use it successfully. This largely entails in-application documentation, examples, and disabling legacy functionality within the application. All with the end goal of preventing users from inadvertently choosing legacy, or poorly supported, options when configuring their CI/CD workloads.

    Progress thus far

    Suffice it to say, Jenkins Essentials is a hugely ambitious project! We have been making steady progress however, as you can see in the jenkins-infra/evergreen repository on GitHub. We have been adamantly following the Jenkins Enhancement Proposal process, and have been making sure our designs and implementations are clear as we build them. Thus far we’ve written designs and implemented:

    Unfortunately we don’t yet have the first parts of the Automatically Updated Distribution working, which means you cannot download Jenkins Essentials today and get started with it. We’re still building the Jenkins-side and server-side components necessary to make the full feedback loop operate, without which we would not be able to safely deliver new upgrades to Jenkins Essentials installations.

    If you’re interested in getting involved, you can check out our Gitter channel or our Jira issues board.

    Jenkins Essentials is just one major initiative going on in the Jenkins project this year, so I hope you’re as excited as I am for the future of Jenkins!

    About the Author
    R. Tyler Croy
    R. Tyler Croy

    R. Tyler Croy has been part of the Jenkins project for the past seven years. While avoiding contributing any Java code, Tyler is involved in many of the other aspects of the project which keep it running, such as this website, infrastructure, governance, etc.