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: Sladyn Nunes
Mentor(s): 赵晓杰(Rick) Kristin Whetstone Parichay Barpanda Martin d’Anjou
Advisor(s):: 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
-
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.
Roadmap
The roadmap for the future can be found here.
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.