What is Continuous Integration/Continuous Development (CI/CD)?
Continuous Integration / Continuous Development, often abbreviated as CI/CD, is a set of operating principles and practices that encourage a culture of delivering code changes frequently. CI/CD is an agile methodology, generally used for application development.
CI/CD automates deployment, which makes it easier for developers to focus on improving code and satisfying the business’s key performance indicators (KPIs).
With CI/CD tools, developers (who need to push frequent changes) and IT/Ops (who dream of stability) can work together to ensure that applications remain as stable as possible, even during the development process.
What are some CI/CD tools?
Most CI/CD tools integrate with agile tools, version control repositories, and other third-party platforms, including source code management and build management tools.
Some popular CI/CD tools include:
- Circle CI
- AWS CodeBuild
- Azure DevOps
- Atlassian Bamboo
- Travis CI
- Kubernetes (Orchestration System)
Some tools, such as Dock, are containers, which help teams to scale up or down environments with variable workloads.
What is continuous integration?
Continuous integration occurs when developers continuously implement small changes by checking in their code hourly, daily, weekly, or at another regularly scheduled time to version control repositories, like GitHub, where teams merge code to the main branch.
To begin with continuous integration, teams need to configure their version control settings and define their protocol, or how code is merged into environments such as development, testing, and production.
The short turnarounds makes it easier to find errors, defects, and other quality issues. In addition, continuous integration makes it easier to avoid complicated code merges, as it is less likely developers will be working on the same exact code. However, features themselves are turned around at more varied intervals.
Today’s applications are complex. Teams need to integrate changes across a number of platforms and third-party tools, which makes validation tricky. Continuous integration solves that problem by creating a pipeline where teams build, package, and test applications at a regular cadence.
By continuously integrating, teams can build digital products that deliver what customers both want and need, boosting code quality and enhancing collaboration practices.
One potential drawback of CI, however, is that teams need to write tests for each new feature, as well as minor improvements and fixes. The CI server automatically runs tests for each new code batch. But in general, CI reduces the cost for testing and frees up quality assurance teams to focus on enhancing products.
What is continuous delivery?
Continuous delivery picks up where continuous integration left off.
In continuous delivery teams push code on regular schedules–hourly, daily, or as often as is required by the business. This means that teams don’t need to spend days, or even weeks, prepping for a big release day.
In addition to automated testing, continuous delivery has an automated release process, so you can deploy your application any time by clicking a button.
While continuous deployment is often a good practice for development teams, it can fall short in certain cases, such as business application development.
In general, the CD pipe pipeline includes 3 stages: building, testing, and deploying. Rather than only work in production, teams work in other environments, including development and testing. More importantly, CD automates the process of pushing code changes to these various environments. Teams validate changes by running automated tests against a build they created.
Continuous delivery involves configuring variables for the target environment and ensuring that various application components successfully start, restart, or call service endpoints for third-party APIs, web servers, and databases. IT/Ops benefit from having stable configurations, as the environment variables are divorced from the application itself.
CD can also involve taking code from version control repositories, automating code to manage the cloud infrastructure, providing log data, and offering regular updates on the delivery status. Your team can also configure the continuous delivery stage for data synchronization, library patching to instrument downstream calls, and more.
What is continuous deployment?
CD is an acronym for both continuous delivery and continuous deployment, two terms that are sometimes used interchangeably.
However, continuous deployment is really the step that follows continuous delivery. Once your team is accustomed to releasing software at least daily, then continuous deployment might be the next logical step.
This is the stage where all of your new builds that pass quality assurance testing become available to customers. Any features that fail testing are returned to production.
Continuous deployment makes it easier for customers to get exactly what they need, as work can go live as soon as it’s ready.
How do continuous integration and continuous delivery work together?
The CI/CD pipeline comes together to ensure that calls to servers, backends, databases, and other third-party services occur without a hitch. Together, CI/CD tools automate the build process by packaging software, databases, and other crucial components.
CI/CD tools also provide a number of tests, including API testing, regression tests, and security testing. If new code changes break current unit tests, then developers are alerted of those changes as well. You can also incorporate unit tests into the continuous integration cycle so that your team identifies issues before the continuous delivery stage.
To determine whether your CI/CD pipeline is benefiting the team, evaluate KPIs such as MTTR and deployment frequency.
What are feature flags? How do they relate to CI/CD?
Another tool that developers use when running code through the CI/CD pipeline is feature flags, which are also known as feature toggles and feature switches. CloudBees, Optimizely, and other third-party feature flag tools integrate with CI/CD tools. They enable teams to turn on and off certain code and features, but without writing and committing new code. This ensures that users do not encounter in-progress or broken features during production.