Goal: Provide an out of the box solution for packaging Jenkins distributions as WAR files or Docker images
Status: Completed
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.
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.
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.
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
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.
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
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
Features:
Hosting on a jenkins.io subdomain.
Rigorous testing support.
Code Quality Checks.
Self-hosting capabilities.
User guide.
Repo - https://github.com/jenkinsci/custom-distribution-service.
The roadmap for the future can be found here.
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.
The Custom Distribution Service was created from scratch during GSoC and can be found here on Github.