Image source zhengzaishuru via Getty Images
By: Eveline Oehrlich
As the lifecycle of a product goes through many different stages with various stakeholders involved, each one with different expectations, the concept of “continuous” is essential across organizations leveraging DevOps. The best practices of continuous integration (CI), continuous delivery (CD), continuous testing and continuous deployment are essential in the different stages across the software development lifecycle. Each term refers to a unique concept, and DevOps practitioners need to understand the differences between them if they want to achieve maximum success with the DevOps approach.
Continuous integration (CI) comes from Agile development methodologies. Continuous Integration (CI) is the practice of frequently merging code changes from multiple developers into a shared repository. The goal is to detect and resolve integration issues as early as possible in the development cycle. With CI, automated tests are run every time new code is merged into the shared repository, allowing developers to identify and fix problems quickly. One goal is to find integration issues early in the process when they are presumably smaller and easier to fix. Additionally, CI ensures that the code is always ready to be released into production. CI tools such as AWS CodePipeline, Atlassian Bamboo, Azure Pipelines, Bitbucket Pipelines, Jenkins, CircleCI, GitLab and Jenkins are examples of automation solutions in this space.
Continuous Delivery (CD) is the practice of automating the software delivery process so that software can be released to production at any time. In CD, code changes are automatically built, tested, and prepared for release, allowing the development team to release the software to production with minimal manual intervention. When CD is done correctly, the developers will always have a deployment-ready build artifact that has passed through a standardized test process. In order to make that possible, developers make small, frequent changes to their code base and test as they go. It requires continuous integration, as well as frequent feedback cycles and project managers who are monitoring the development lifecycle. CD tool examples include Azure DevOps Projects, Buddy, CircleCI, CloudBees, Flosum, Gearset and GitLab.
April is CI/CD month at DevOps Institute! Find out more by attending CI/CD-focused events: devopsinstitute.com/view-upcoming-events/
Continuous testing refers to running tests during the entire development lifecycle of a system, not waiting until the final stages, making testing part of the delivery pipeline to have a real-time status and feedback on software quality. Its goal is primarily to speed up the development and deployment processes, and it’s a key ingredient to enabling continuous integration, continuous delivery, and continuous deployment.
In summary, CI is about automating the process of integrating code changes, CD is about automating the process of preparing code for release, and CD is about automating the process of deploying code changes to production. All four of these principles are intertwined, and all four are critical to the job of the continuous delivery architect, the person responsible for designing, implementing and managing DevOps deployment pipelines and toolchains. The ultimate goal is to achieve continuous software development which includes continuous integration, delivery, and deployment. While all are connected to Agile and DevOps all of them are supported through automation to create, produce, test, and release higher-quality code more quickly. Measuring the frequency of software deployment is considered as the best single indicator of a high-functioning software organization and is increasingly associated with commercial success.
Continuous Deployment (CD) is an extension of Continuous Delivery that automatically deploys new code changes to production environments without any manual intervention. With Continuous Deployment, any code change that passes automated tests is automatically deployed to production, resulting in faster feedback cycles and shorter time-to-market. Its goal is to minimize the cycle time required to write a piece of code, test it to ensure that it works correctly, and then deploy it to the live environment for immediate feedback from users. While continuous delivery means that one is always ready to deploy code, continuous deployment means that code is pushed out to users as soon as it has passed testing. That distinction is important because businesses sometimes choose not to release code continuously, even if it is ready to deploy, perhaps because of regulation concerns or other business-related reasons. Examples of CD or CDE tools include AWS CodeDeploy, Bamboo, CircleCI, Codeship, Google Cloud Deployment Manager, GitLab, Jenkins, Octopus Deploy, and Sumo Logic.
Next Steps: Continuous Learning
DevOps Institute empowers DevOps humans to advance career development and upskill for enterprise transformation by providing the resources, guidance, experts, and encouragement to learn. We’ve put together suggested Career Pathways and offer essential core competencies and various certifications to help advance your DevOps career and grow professionally.
Get started at devopsinstitute.com/certifications