Organization: Jenkins Project
Student: Alexandru Somai
Mentors: Oleg Nenashev, Martin d’Anjou
Table of contents
External Workspace Manager Plugin
The build workspace for Jenkins may become very large in size if you use a compiler that generates a very large volume of data. One of the solutions for this is to have a Jenkins plugin that is able to manage and reuse the same workspace between multiple builds.
During Google Summer of Code 2016 I have implemented from scratch a Jenkins plugin called External Workspace Manager, which provides a workspace management system for the Pipeline plugin. It facilitates workspace share and reuse across multiple Jenkins jobs running on different nodes. It eliminates the need to copy, archive or move files. The plugin also supports automatic workspace cleanup, multiple disk pools and flexible disk selection management.
Source code
The project’s source code is on GitHub: https://github.com/jenkinsci/external-workspace-manager-plugin.
Design
During the community bonding period I have started writing a plugin design document. The document was also updated on the go, as I was progressing with the code. It is shared publicly via Google Docs at this link.
Contributed changes
External Workspace Manager Plugin
I have tracked my progress using JIRA. The EPICs are:
- Coding period phase 1: JENKINS-35019
- Coding period phase 2: JENKINS-35971
Following is the complete list of pull requests that I have made on the External Workspace Manager Plugin until August 23rd:
And the link to the list of commits on the same project:
The External Workspace Manager Plugin version 1.0.0 was released and it’s available in the main Jenkins update center. It can be used by the Jenkins users.
My project is dependant, more or less, on other plugins. Therefore, I have contributed to other Jenkins plugins too.
Run Selector Plugin
The External Workspace Manager Plugin needed a feature to select a specific build based on some input parameters. Such feature was available in the Copy Artifact Plugin. But, my mentors and I have decided that it would be better for the community to isolate the build selection logic in a separate plugin, so that, in the future other plugins may benefit from this functionality. I have started a discussion about this on the Jenkins dev ML: https://groups.google.com/forum/#!topic/jenkinsci-dev/G-ZnJu3h67g.
The work I did to decouple the build selection logic is in the
Run Selector Plugin.
Following is the link to my pull requests, until August 23rd:
And my commits on the Run Selector Plugin are:
I have also released the Run Selector Plugin with the above changes. Minimum version 1.0.0 is needed to be used by the External Workspace Manager Plugin.
Workspace Cleanup Plugin
The External Workspace Manager Plugin needed a workspace cleanup feature, so that the user may automatically delete the workspace after it was used. The Workspace Cleanup Plugin does that, but it was not Pipeline compatible. Since my project is mainly focused on Pipeline jobs, I had to make the Workspace Cleanup Plugin to be Pipeline compatible.
The pull request for that change is #27 [JENKINS-28454]. The afferent commits are:
The Workspace Cleanup Plugin was released with my changes. Since version 0.30 it is compatible with my project, External Workspace Manager Plugin.
Automated testing
There are two types of automatic tests that I have written for the External Workspace Manager Plugin:
-
Unit tests
The unit tests are located in the plugin’s source repository, under the src/test/ directory.
-
Acceptance tests
The acceptance tests are located in a separate repository. They are meant to test the user interface and the integration with other plugins. For this, I have created the pull request #172 [JENKINS-36076].
Pipeline examples
I have also contributed to the Pipeline examples repository. The pull request is #45, and the commits are: https://github.com/jenkinsci/pipeline-examples/commits/master?author=alexsomai
Documentation
The complete plugin’s documentation that I have written may be found on this page. It contains information of how to get started with the plugin, available features and basic usage examples.
Future work
There are many features that can be added in the future to this plugin, therefore I am planning to continue my contributions to the Jenkins project. The possible features are not part of the initial GSoC commitment, and were identified during the development phase.
At the moment of writing this page, I have a work in progress pull request for the workspace browsing feature #37. Other features and improvements are grouped in this EPIC JENKINS-37543.
Blog posts @ jenkins.io
During the GSoC I have also submitted several blog posts on the Jenkins blogging page:
- The introductory blog post: https://jenkins.io/blog/2016/05/23/external-workspace-manager-plugin/
- Alpha release announcement: https://jenkins.io/blog/2016/06/30/ewm-alpha-version/
- Beta release announcement: https://jenkins.io/blog/2016/08/09/ewm-beta-version/
- Stable release announcement: https://jenkins.io/blog/2016/08/22/ewm-stable-release/
The blog posts were submitted via pull requests: #254, #296, #341 and #353. I have also made some other minor contributions to the jenkins.io repository:
Presentations
Midterm presentation
During the midterm evaluation I had a presentation about the work I did on the project so far:
- the link to the video recording: https://www.youtube.com/watch?v=u4zhxfUT8P4&t=22m7s (my presentation starts at 22m7s)
- the midterm presentation slides are shared publicly via Google Slides following this link
Final presentation
By the time this page was submitted, the final evaluation presentation did not take place yet. It is scheduled for August 25th, 6 PM UTC:
- the Jenkins Online Meetup https://www.meetup.com/Jenkins-online-meetup/events/233378586/
- the presentation will be available on the following link https://plus.google.com/events/cabscbi59g6e60tbq9pa65tir18
- the final presentation slides are shared publicly via Google Slides following this link
Contact
For any questions regarding the project:
- join the plugin’s Gitter chat https://gitter.im/jenkinsci/external-workspace-manager-plugin
- send me an e-mail at [email protected]