Goal: Extend Jenkins to support storing artifact usage history in external databases
File fingerprinting is a way to track which version of a file is being used by a job/build, making dependency tracking easy. The fingerprint engine of Jenkins can track usages of artifacts, credentials, files, etc. within the system. It does this by maintaining a local XML-based database. This leads to dependence on the physical disk of the Jenkins master.
The core idea of this project is to extend Jenkins core to support storing of fingerprints in an external storage, which would also allow tracking them across the entire CI/CD flow.
Build a pluggable storage engine, which would allow fingerprints to be stored in external storages managed by storage system specific plugins.
Implementation of one such plugin (for Redis). This implementation should act as a reference for the development of other such external storage plugins for fingerprints.
Build the Fingerprint External Storage API Plugin to track the flow of fingerprints across the entire CI/CD flow.
If you are a Jenkins user, consider trying out the Redis Fingerprint Storage Plugin. We appreciate you trying out the plugin, and welcome any suggestions, feature requests, bug reports, etc.
The following deliverables were planned for phase-1:
Jenkins core ready with support for pluggable storage extension point (beta API), that can be used by plugins (lacking migration and fingerprint cleanup support)
FileFingerprintStorage designed, implemented and conforms to maintain backwards compatibility.
POC reference implementation for Redis Fingerprint Storage Plugin.
Documentation as well as tests written for the points mentioned above.
We were able to successfully achieve them. Details can be found in the phase-1 blog post.
The following deliverables were planned for phase-2:
Alpha version of Redis Fingerprint Storage Plugin released.
Migration handling support added.
Fingerprint cleanup support added.
Blog Post (Phase 2)
The phase-2 deliverables were achieved, and some more. Phase-2 blog post explains them in detail.
Meetings are held every Monday at 15:00 UTC and every Thursday at 14:30 UTC. Meeting notes are available here.