Our team is taking on bringing our Continuous Integration (CI) to a more robust and modernize place. What follows are the goals we are trying to achieve with these changes and a rough list of those changes broken into three categories. In some cases, we’ve identified tasks we want to tackle but require a more defined build out of what is required to accomplish it. Thus what is presented here is a rough outline with more details to follow. The intent is to build a solid foundation for CI and then begin working to improve efficiency within the CI system and for developer works followed by improving the overall test matrix to increase the robustness of the projects in the community. We are sending this out early to get community feedback as we feel the foundational tasks are straight forward and during their execution we can evolve the more advanced changes with input from the community.
Goals
- Build a solid foundation for CI
- Treat CI like any other coding endeavor
- Improve efficiency of CI system and jobs
- Enable developers to easily contribute and make modifications to jobs related to their areas of work
Tasks
P1
- Identify and remove all unused jobs
- Put all jobs into soucre control (JJB)
- Move all PR jobs to use GHPRB and sunset pull_request_scanner
– https://github.com/theforeman/foreman-infra/tree/master/puppet/modules/slave/templates
P2
- Move jobs from freestyle to Pipeline
- Foreman core jobs
- Foreman plugins
- Smart proxy
- Smart proxy plugins
- container-based test environment
- need to figure out what slaves can run docker
- which containers to use and make available
- how to use Kubernetes cluster
- Limiting tests run on a PR based on what changes are made (e.g. only running UI tests if webpack/ contents changed only)
P3
- Individual plugin release streams instead of blasting them out to plugins repository if packaged
- start with plugin nightlies
- foreman-maintain and maintenance script (e.g. backup/restore) testing