CI/CD is the name of a software development process that centers on automation through testing to deployment. The ultimate aim is to provide automation for traditionally manual stages relating to monitoring, code delivery, and product deployment. Considered a development process best practice, CI/CD and its automation-driven approach benefits both developers and businesses.
What is CI?
CI stands for continuous integration. This is an automation process for development teams to ensure that when several pieces of code are being worked on by multiple developers, there are no issues with code changes conflicting with those made by their colleagues.
The practice of continuous integration involves the developer team members making an initial decision as to how often to merge their collective code changes. Using an increased frequency allows developers to test the quality of the integrated code more often than they otherwise would.
It sounds like increasing testing frequency might involve extra work, especially if this testing of merged code takes place every day.
However, the point of continuous integration is that the process makes use of automated testing, leading to faster bug fixes, and so removing the repetitive tasks usually found in software development.
This results in development teams saving a significant amount of time by not having to perform manual testing. Such testing can take the form of both unit tests or integration tests, with the former allowing for testing of the validity of individual pieces of code before a merge has taken place, or before tests are run on different modules of the app.
Developers are then able to see if any of their code changes have critical bugs that impact the functioning of the app or have caused any conflicts in code. This enables teams to roll out bug fixes as and when the need arises, instead of wasting time having to tackle multiple issues further down the line.
Continuous integration, therefore, provides the benefits and time-saving of continuous automated tests, which enables the identification and fixing of bugs more quickly and more often than if development teams were not using this approach.
This leads to a vast improvement in code quality before an app is released to consumers.
What is CD?
CD stand for two different stages in the CI/CD process. Namely, continuous delivery and continuous deployment.
First, we have continuous delivery. Once the continuous integration testing process is complete, then the code is merged and bug free.
Because CI has produced robust code that is ready for deployment, this provides a sound and reliable codebase for that stage of the app’s development. This code can then safely be delivered to a central repository, such as Github, Bitbucket, or Gitlab.
Once in the repository, the code is available for deployment by the business operations teams to ensure a product is delivered to customers on previously agreed deadlines. Thanks to the earlier CI process having being completed, they can be confident that that code they deploy is reliable, and so the app will perform well.
Like the testing and merging stages in continuous integration, the process of sending code to a repository is automated, so saving developers more time from engaging in manual processes.
This gives the operations teams merged and production-ready builds in the fastest time possible and with the fullest confidence that they are ready for production and use by customers.
Continuous deployment automates the release of the production-ready build, and the code that constitutes it, to the production stage.
This makes it live and available to customers to view and interact with almost instantaneously. It also makes the release process repeatable if changes based on feedback have to be made. This enables frequent releases, which keeps the app evolving and so useful for the end users.
As a result, developers can deliver app updates, bug fixes, and other changes extremely quickly. This greatly enhances customer satisfaction.
The difference between continuous delivery and continuous deployment
It isn’t just to avoid having an awkward title that the entire process is not called “CI/CD/CD.” The CD stage can refer to continuous delivery or continuous deployment, but in fact, the two are often merged into one step.
The continuous delivery and deployment processes rest firmly upon the foundation built by the highly effective automated test system in the CI stage, which doesn’t allow the delivery of new code into the repository unless the code quality has been thoroughly evaluated.
Depending on the operational processes put in place by the development team, delivery and deployment can be distinct stages if teams wish to check the status of code that sits in the repository manually as a last stage before deployment.
Alternatively, the code can be logged into the repository and immediately sent to production. This combines the delivery and deployment processes.
Such deployment strategies are, ultimately, the decision of the project manager working in consultation with the client to maximize business value.
The combination of CI/CD creates a workflow known as the CI/CD pipeline, and the high frequency changes that can be made to each aspect of an app contribute to keeping the product up to date.
What is a CI/CD pipeline? How do you build one?
The division of all the different features and stages of the CI/CD process creates a linear path to the eventual deployment of an app. This is the CI/CD pipeline, which provides the infrastructure for the entire system.
The pipeline is where the process begins its journey with the formation of an initial series of discrete pieces of code. From here, project managers can design the testing environment and its automation, as well the automated means of merging and integration, and finally bug fixing.
Once this stage conforms to the criteria set by the development team, then the checked code can be delivered to the repository, and from there to deployment, or deployed in tandem with delivery
Fig. 1 CI/CD process
For this development process to work optimally, product managers must assign criteria to each stage of the pipeline. These criteria will determine whether that stage has been met successfully or not, and so whether the team can move on to the next stage of the pipeline.
In this manner, key performance indicators for teams are set, which creates a project roadmap and allows project managers monitor progress.
Once the automation criteria are established, then more traditional development techniques—such as code writing, bug fixing, and database maintenance—can be allotted to team members to ensure the development cycle is continuously monitored and managed.
One thing that is evident from studying the CI/CD pipeline is that the process is flexible. It is possible, for example, to dispense with the CD stages and retain only the CI aspect. This then introduces a well-controlled and managed form of test-driven development to a project.
The delivery and deployment stages are, however, dependent on a thorough CI stage having been carried out, as the quality of the merged code would otherwise be in question.
The pipeline planning therefore entails the creation of workflows and processes, which—aside from the CI/CD process itself—will have other software development best practices in place.
Having these in place improves the running of the pipeline itself, as well as the broader workplace culture, resulting in enhanced productivity and a much stronger app. This, combined with the ability to respond quickly to user feedback, greatly enhances trust in a company’s brand and products.
The most popular CI/CD tools
Setting up a CI/CD pipeline can be expensive initially, but there are tools available that provide a working environment and a good starting point for developers.
The most popular of these tools are:
- Jenkins: An open-source automation server that can handle both CI/CD processes and so facilitate the complete software development cycle. Being open-source and extremely popular, Jenkins also offers hundreds of additional plug-ins to developers.
- Jenkins X: This has all of the same functionality as Jenkins, and no new features. However, it is designed to be used specifically with the open-source container orchestration system known as “Kubernetes.” Originally created by Google, but now managed by the Cloud Native Computing Foundation, Kubernetes is a major cloud provider for CI/CD pipeline building.
- AWS CodePipeline: Amazon’s contribution concentrates on offering continuous delivery pipelines to aid release automation. It also allows for the integration of a third-party central repository such as GitHub.
- Concourse: Self-described as an “open-source continuous thing-doer,” Concourse specializes in providing a complete production environment for the entire CI/CD process. A variety of new features make it appealing, specifically its browser-based UI that uses motion UI to represent the CI/CD pipeline and show where bugs or errors have likely appeared.
- Github Actions: Github is an incredibly popular web-development platform with a code repository. This is its own offering for creating a CI/CD pipeline, and offers functionality in any language a developer prefers working in.
- MS Azure Pipelines: A tool included in the Azure DevOps services. This app specifically allows for a baseline infrastructure to be employed and used by all team members, freeing up time for the software development teams to carry on with other work. Cloud based, the entire team will be working from the same IDE, so minimizing disruption.
- Spinnaker: Another open-source platform, Spinnaker provides resources to aid with continuous delivery and pipeline management. Its system can integrate with the most common cloud providers, and it also enables a test environment to be set up on macOS or Windows.
- Tekton: Promising to offer CI/CD best practices straight out of the box, Tekton is another open-source platform, and can be used in conjunction with several of the other tools mentioned here. This grants considerable flexibility to developers.
The business benefits of CI/CD
Some of the business benefits of adopting the CI/CD process should now be clear; but some others are worth teasing out.
Let’s take a look:
- User satisfaction: Automated deployment means that not only is the time to market greatly accelerated, but also the speed of receiving, and responding to, customer feedback. This allows for constant improvement of the product at a much faster rate, leading to greater customer satisfaction and a great brand reputation for reliability.
- Automation reduces manual tasks: When the testing and deployment processes are automated, this removes a lots of repetitive manual tasks. Developers and operations managers are then free to concentrate on other company projects, as well as high priority tasks involved in monitoring the CI/CD pipeline.
- Faster and easier bug fixing: Because developers are now avoiding cognitive overload from reduced need for manual and repetitive tasks, developers are free to quickly take care of bug fixes as when they appear.
- Better code quality: Once the code reaches the repository, it has been through the automated tests and attendant bug fixes. Teams can therefore be extremely confident that the code they are about to deploy is of high quality, with no errors or branching chain conflicts. This leads to confidence in the app and therefore brand reliability, and a better product overall.
- Easier change rollback in case of errors: Even with a robust CI/CD system in place, it is sometimes necessary to revert to an earlier build. With a logged repository history, reversion has less impact on a project’s time and budget.
The CI/CD approach avoids integration hell on merge day, which adds developer advantages to the business benefits of CI/CD.
All code is exhaustively tested and conflicts are removed or fixed, allowing for fast delivery to the repository. This also allows for rapid deployment.
The automation involved in the CI/CD process gives considerable savings in developer time, and this will be reflected in project budgets. This also entails a faster time to market, and an enhanced ability to react to customer feedback in good time.
This combination of the business and development benefits is what grants the CI/CD process best practice status, and any company currently engaged in software development should definitely consider implementing it.