Open-source 4G/5G Wireless Software Stack
Submitted By Jenkins User Raphaël Defosseux
This France-based open software community gets a CI lift with a Jenkins assist.
Organization: OpenAirInterface Software Alliance, https://openairinterface.org
Team members: Remi Hardy, CI expert and Mohammed Ismail, CI Engineer, both of OpenAirInterface Software Alliance
Programming Language: C/C++ Python
Platform: Embedded, Docker or Kubernetes, Linux
Version Control System: GitHub, GitLab
Build Tool: Cmake, Make, Ninja, Docker, Podman
Jenkins fuels a fully systematic and automated process that is quite transparent for the developers.
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.
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:
- Better test coverage than with manual integration
- Better contribution since formatting, compilation warnings are checked
- Easier (still not that easy) work for the integrators
- A fully systematic and automated process that is quite transparent for the developers
- In the end, better quality overall!