Custom Jenkins distribution build service

This site is the new docs site currently being tested. For the actual docs in use please go to https://www.jenkins.io/doc.

Goal: Provide an out of the box solution for packaging Jenkins distributions as WAR files or Docker images

Status: Completed

Team

Student: no image Sladyn Nunes

Mentor(s): linuxsuren 赵晓杰(Rick) no image Kristin Whetstone baymac Parichay Barpanda martinda Martin d’Anjou

Advisor(s):: oleg nenashev Oleg Nenashev

The main idea behind the project is to build a customizable Jenkins distribution service that could be used to build tailor-made Jenkins distributions. The service would provide users with a simple interface to select the configurations they want to build the instance with eg: plugins, authorization matrices etc. Furthermore it would include a section for sharing community created distros so that users can find and download already built Jenkins war/configuration files to use out of the box.

Key Deliverables

  • A backend service built on spring boot having a modern Restful API support for constructing a customized WAR package and configuration files.

  • A configuration constructing engine that can convert UI fields into a configuration file.

  • Front End application in the form of a website with a simple user interface for the users to interact with and customize the distribution.

  • Repository sharing community built most commonly used Jenkins configuration files.

Plan for Phase 1

  • Develop a simple workflow(Spring Boot Application) from UI bindings to the generation of the JCasC YAML file.

    • Reuse concepts from the JCasC Plugin to generate this JCasC file.

    • Verify the configuration generated against the JCasC Schema.

  • Begin with a simple User Interface to test the workflow against.

  • Reuse logic from the jenkins core to construct and if possible render the user interface in react for all the plugins.

  • If the rendering is not possible, default to building the schemas from the data bound constructors or the JCasC Schema.

  • Blog Post for Phase 1.

Evaluation Phase 1

  • Features:

    • War Generation

    • Support package generation

    • Develop a plugin selection API

    • Supports UI to select plugins.

    • Support pagination for 1700 plugins.

    • Support package configuration download.

    • Front-end support to generate custom packages.

  • Repo - https://github.com/jenkinsci/custom-distribution-service

Plan for Phase 2

  • Utilize the Custom War Packager (CWP) tool for heavy lifting and converting the configuration file to a WAR package.

  • If necessary, implement a new wrapper around CWP so some logic can be reused from here

  • Integration of the above wrapper into the service.

    • This step should be relatively simple since the CWP library is fairly straightforward.

  • The service should really take shape after this week since we would have build the entire workflow from: UI → Config → War Package

  • Work on hosting the service.

  • Blog Post for Phase 2.

Evaluation Phase 2

  • Features:

    • War Download Feature.

    • Filters for plugin list.

    • Support community configurations.

    • Support for custom community configurations.

    • Docker support to run the service.

    • Pull request creation support.

    • Caching support for plugin list which improved performance

  • Repo - https://github.com/jenkinsci/custom-distribution-service

Plan for Phase 3

  • Work on community hosted repositories for most used configuration files.

  • Set up a github repository(Source of Truth) with the configs, allowing users to share their configs either via the service

  • Workflow supported: Service → Github

  • Login feature for users via Github or jenkins.io.

  • Work on developing the database schema to store the user generated configurations.

  • Integration of database into the service.

    • Spring boot makes it quite easy to integrate mongoDB into its architecture so we could leverage that to be able to store private user configurations.

    • Add the Database to the service and introduce this feature as a Beta Release

  • Accomplish any remaining goals like tests cases and publish releases of a new plugin if necessary

Evaluation Phase 3

Resources

Roadmap

The roadmap for the future can be found here.

Sequence Diagram

The below diagram is the overview of the proposed sequence Diagram:

cds sequence diagram

Meetings

Office hours are scheduled every Tuesday at 13:00 UTC, and every Thursday at 12:00 UTC The meeting notes available for anyone to read.

Getting the Code

The Custom Distribution Service was created from scratch during GSoC and can be found here on Github.