Project goal: Cleaning and modernizing the extensively used GitLab plugin
Skills to study/improve: Java, Docker, GitLab
The GitLab Jenkins plugin is widely used (over 55,000 installations), but it has not had an active maintainer for a long time. Several CloudBees employees have volunteered to keep it afloat over the years, including Owen, Basil, Bruno, Jean-Marc, and Mark. However, it could use a sprint of active development.
The primary maintenance issue with the GitLab plugin is the use of a very old version of RESTEasy.
The goal of this GSoC project would be to replace usages of this library
with usages of gitlab4j-api
via the GitLab API Jenkins library plugin,
normalizing the GitLab plugin’s use of the GitLab API with regard to
the GitLab Authentication,
GitLab Branch Source,
and GitLab Logo plugins.
This project is on the easy side, but it requires a large amount of careful porting of existing code to call equivalent APIs with slightly different calling conventions. At each stage, care must be taken to ensure that errors remain propagated correctly.
A particular challenge with this project is to ensure that there are no regressions for corner cases:
Unauthenticated proxy servers
Authenticated proxy servers
Proxy servers and TLS URLs
Handling these corner cases should be feasible with the new library, but the existing logic will likely need some modifications. Testing proxy authentication is a bit laborious, but it can be done with various Docker images.
There is no substitute for functional testing, so testing changes to the GitLab plugin would also require setting up a local instance of GitLab. This would be a good opportunity to gain experience with the setup and administration of GitLab. The idea would be to exercise existing code against a real GitLab installation, then to test that the ported version still works in the same manner. Unfortunately, unit and integration tests will be of little value for this project.
If additional time is available, the GSoC contributor could look into reviving the Docker-based functional test suite. It has been broken for some time and is currently disabled.
The success criteria of this project would be a release of the GitLab plugin
without a RESTEasy dependency and with a gitlab4j-api
dependency,
all without regression to end users.
Good first issues will help a new contributor better understand the plugin and how to debug and diagnose it.