What is CI/CD?
CI/CD means continuous integration / continuous delivery. It is an approach used in software development to automate and optimize the process of integration, testing, and deployment of applications.
The idea behind the concept of continuous integration is that developers must integrate their codes with the source of truth regularly. By doing this, the quality of the project increases, and the project has an early detection and solving of problems related to the integration. It allows code to be in production, including software versioning and testing to release the new version. In the telco world, this represents the LLD design. Then the objective would be to automate the whole process of HLD-LLD-PoC so that when you alter a template or a configuration, this change is evaluated and ready to be implemented automatically.
On the other hand, continuous delivery refers to the automation of the deployment process: persistent, fast, and safe after the deployed software changes are available for clients to use, aka it’s on production. Translated into the telco world, it represents the template of an approved configuration available for deployment.
Let´s see an Telco Example
Suppose that in a template configuration of equipment, you want to add a new parameter, let’s say, a retry time of 50. With the current work methodology, the process consists on:
- Making a design for the new template (updating de HLD)
- Creating the new configuration template (updating the LLD)
- Creating a PoC for testing
- And finally, if everything goes well, assemble a MOP to execute the implementation.
Considering the previous example, we will discuss two situations:
- The next day, we deploy a service that uses this new parameter; there’s a chance that maybe the person in charge doesn’t know about the configuration or didn’t read the updated documentation. The result is that the service could not have the correct configuration.
- Later, the processor of the equipment implementing the change stops working when receiving loads.
Now, we have two options: delete the new parameter or load the backup generated previously. In both cases, the template gets lost, and the final result is a network without a uniform configuration.
But, if we decide to use a CI/CD process, whenever a change occurs, the network is updated automatically. In other words: with a modification to the template, all the equipment will have an identical configuration for all services. If a problem appears: the parameter would be removed from all deployed services, and as a result, the network possesses a uniform configuration.
I think most of us are familiar with a merge conflict: this happens when different people have altered the same part of the code we modified. Now we have to compare the different versions and decide which sections will be maintained, and the more changes we make, the higher the opportunity for conflicts.
CI/CD supports the goal of accelerating the development process, and small changes are constantly released, keep in mind that these changes are not complex; eventually, we lower the risk of defects and issues.
It is the key to agile development where developers divide the workload and accelerate the building of new features and, although related to today’s subject, is a broader concept that we will cover in another chapter of “Iquall Learning Pills”