Continuous integration, continuous delivery, and continuous deployment are three different terms that are often confused due to the similarities of their overarching intent, which is to expedite and improve the software development and delivery process.
Continuous integration automates the build and testing process each time a developer makes changes to code. Individual code is shared in a version-control repository after each update, and automated builds and tests are run prior to the code's integration to the development environment.
Continuous delivery is the next step, and is contingent on continuous integration being in place. Through a combination of extensive regression testing, UI, and performance tests, developers can ensure that code is deployable at each and every step of development. Once the code is ready for production, it can be deployed on demand with confidence that it will perform as intended.
Continuous deployment is the final evolution of the CI/CD process, and automatically deploys code to production after each build. Continuous deployment eliminates manual intervention prior to deploying new code, which is still necessary with continuous delivery. Continuous deployment may not be appropriate for every DevOps team but is a worthy goal towards fully automating the software development lifecycle.
The software development practices and methodologies involved with continuous integration and continuous delivery (CI/CD) are essential components to a successful DevOps strategy.
The cultural shift towards implementing DevOps practices was driven by the desire to improve productivity and performance. Bringing software developers and IT operations into alignment improved communication and created shared objectives and responsibilities by breaking down existing silos. DevOps supports a more collaborative approach to building, testing, and deploying software that ideally results in producing better quality applications faster.
With continuous delivery, automated testing tools deploy code changes to a staging environment and/or a production environment. Consequently, quality assurance runs continuously throughout the development lifecycle, resulting in fewer performance issues and lower costs while reducing the time between application development and deployment.
The most obvious benefits of continuous delivery all support the reasons for implementing a DevOps philosophy to begin with: increased productivity, improved performance, lower costs, and the ability to consistently reduce the time between deployments without sacrificing quality.
Automated tests help reduce errors, working on updated code in a shared environment enhances communication, and streamlining the workflow of the deployment process improves efficiency.
One under appreciated benefit of a continuous delivery pipeline is the boost to team morale and confidence. Errors and issues are caught earlier in the development process, and are therefore easier to fix.
Eliminating the frustration of failure and the work involved with troubleshooting and mitigating mistakes can have exponential benefits for your team, your users, and your application.
Implementing continuous delivery into your organization’s DevOps transformation requires a well-researched plan and a thoughtful approach to minimize disruption. Consider the following and be willing to reevaluate and revise as necessary:
- Start small: Easing into CI/CD with a smaller project allows your team to get familiar with the concept, processes, and tools with less pressure. Experiencing success with a simple project can help the idea gain momentum as your organization witnesses the potential value firsthand.
- Map out the process: Clearly defining the steps and roles involved in the delivery process before you begin makes it easier to determine what areas could be automated and who should be assigned to certain tasks.
- Visualize the pipeline: Having a comprehensive understanding of the build pipeline makes the concept more accessible to your team and facilitates the orchestration of the process.
- Identify KPIs: Being able to quantify your team's progress validates the cost and effort involved with changing procedures to business stakeholders.
- Identify the right tools: Figuring out which CI/CD tools are best suited for your organization is key to ensuring consistency and streamlining your workflows.
“We’re an agile shop. We usually release code into production once or twice a week. But outages and fixes interrupt our sprints and impact productivity... [With AppDynamics] we’ve gained immediate visibility into how our code works in production.”
Ben Hofmann, Manager of Web Development, PennWell Corp.