Custom Jenkins distribution build service

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

Status: Active

Team

Details

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.

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.

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

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.

Links