External Workspace Manager Plugin @ GSoC 2016

Organization: Jenkins Project

Student: Alexandru Somai

Mentors: Oleg Nenashev, Martin d’Anjou

Table of contents

  1. External Workspace Manager Plugin
    1. Source code
    2. Design
    3. Contributed changes
      1. External Workspace Manager Plugin
      2. Run Selector Plugin
      3. Workspace Cleanup Plugin
      4. Automated testing
      5. Pipeline examples
    4. Documentation
    5. Future work
  2. Blog posts @ jenkins.io
  3. Presentations
    1. Midterm presentation
    2. Final presentation
  4. Contact

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:

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:

  1. Unit tests

    The unit tests are located in the plugin’s source repository, under the src/test/ directory.

  2. 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 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:

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:

Contact

For any questions regarding the project: