Background: OpenAirInterface (OSA) is an open software that gathers a community of developers from around the world who work together to build wireless cellular Radio Access Network (RAN) and Core Network (CN) technologies.
Our developer community is mainly working in academic research centers and at a few industrial partners. Before I joined the company, the process of integrating new contributions was fully manual. This community was not used to automated builds and test processes, and the validation was not systematic. When I joined the foundation three years ago they thought incorporating Continuous Integration would be a one-year job. But I warned that CI is a living animal and requires constant maintenance.
Goals: Improve the quality and the functionality of our source code base while constantly adding new features.
Solution & Results: I set out to create a full open-source 4G/5G stack that is easy to use and contribute to. So I proposed to hook the Git repositories with an already existing, not-used-at-all Jenkins instance. I've created some initial pipelines that were just doing simple builds and feedback to the Git Merge Request. It enabled a reflection of the contribution workflow with not only builds and tests but also review and approval processes.
Jenkins eased the pain for the integrators!
Since our expansion in development from 4G to 5G, we have hired two additional engineers to help add more pipelines. We have more pipelines that perform verification and validation since most of our contributors cannot run the entire test suite independently. We are even using the Jenkins pipeline to create a real-time dashboard for our merge request status from review to approval status.
Last but not least, since one of our founding members has its own OpenShift Cluster, we have migrated part of our pipelines to an instance running on that cluster. We are now in the process of using "virtual" agents (pods in the cluster) to run our pipelines. The key capabilities we deployed include, first and foremost, the plugins between Jenkins and our Git repositories hosts (GitLab, GitHub). Without these, automation would have been more difficult for Blue Ocean plugins for a nice view of the different stages of a pipeline. We also used the email extension and Slack plugins to notify the developers of their contribution results. The Lockable resources plugin is heaven! It enabled us to share hardware resources (computers, radio equipment, smartphones) between CI builds and developers doing a debug session.
The results have been remarkable: