![Resource background image](/images/cheflibraries/backgrounds/brand-refresh-q4-2021/resources-bg.png)
Glossary
What is Continuous Delivery?
Software development has been utterly transformed since the days when new versions or major upgrades were built every year or so and then heavily lifted into place. With Agile Development, change is constant rather than occasional. Agile involves a trio of practices: Continuous Integration, Continuous Delivery and Continuous Deployment (CI/CD).
Continuous Delivery Definition
So, what is Continuous Delivery (CD)? Continuous Delivery includes tools, capabilities, processes and a cultural change to allow DevOps application teams to get software changes into production quickly, safely, reliably—and nearly continuously.
Continuous Delivery relies upon pipelines that provide a consistent path to delivery where software changes are vetted through peer reviews, automatically tested and then audited before being put into production.
As stated on the Progress Chef Continuous Delivery Pipeline Automation Tools page, “CD goes beyond application code changes automating not only the Continuous Integration of the software but also the delivery of infrastructure, supporting systems and requirements for running and maintaining the application.”
Importance of Continuous Delivery in Software Development
Continuous Delivery is not just for automating the delivery of application code changes. It also involves continuously integrating software changes and continuously delivering the underlying infrastructure.
Continuous Delivery of the software and infrastructure provides numerous benefits, including:
- Proof that the software change was successful, and the application operates as expected.
- Supporting environments (development, pre-production and production) are updated along with the software so the software and environments stay in sync.
- Deployment to on-premises, cloud or edge environments is automated.
- Automation of all supporting tasks (provisioning, testing and auditing) is performed.
- Delivery of supporting tools, systems and platforms is likewise automated.
- Security and compliance can be supported for numerous elements of the application.
What is Continuous Integration?
What is Continuous Integration (CI) and how does it fit into Continuous Delivery? CI is where developers merge all code changes into a central repository that contains code changes and updates from other dev team members. Once in the repository, automated builds are run, tested and audited to help safeguard the security, performance and functionality of the freshly built software.
Understanding Continuous Integration
The Role of Continuous Integration
There are significant benefits for adopting CI, including:
- Better Experience for Testers: Having a common repository, with all the different versions and code builds, allows testers to more easily isolate and trace bugs and greatly simplifies the QA process.
- Faster Deployment: Through automation, Continuous Integration eliminates the old, tedious, time-consuming and error-prone approach of deploying new code and related systems.
- Improved Code Quality: Automated testing and automatically running proven processes minimizes errors so only quality code is moved through the pipeline.
- Reduced Friction, Increased Collaboration Amongst DevOps Team Members: A central and impartial code and systems repository reduces misunderstanding and friction among team members.
- More Secure Integration: The more people that are involved in a code project, the more likely it is that integration will go awry. However, CI and repository tools allow multiple people to work on separate pieces of the code safely.
Continuous Integration vs. Continuous Delivery
Continuous Delivery automates and streamlines the entire software release lifecycle until it reaches production, then through iteration, the process begins again.
Meanwhile, Continuous Integration automates the creation, testing and auditing of software code.
![](/images/cheflibraries/resources/what-is-continuous-delivery.png?sfvrsn=482f4f14_1)
Source: Medium
Benefits of Implementing Continuous Delivery and Integration
- Reduced burden with smaller code changes rather than large lifts
- Easier isolation of faults
- Faster tracing and Mean Time to Resolution (MTTR) for software issues
- Faster software release rate
- Reduced software backlog
- Happier and more productive end users
- Increased team transparency and accountability
- Simplified maintenance and updates
Benefits of Continuous Delivery with DevOps
DevOps blends development with operations (thus the term DevOps), to facilitate development, delivery and iteration of new software faster and with tighter security. DevOps teams collaborate deeply across multi-disciplinary groups to automate software delivery.
Some specific benefits of CD include:
Speedier Delivery of Software: By having a DevOps CI/CD pipeline, applications are delivered more quickly and more often. New code can be delivered as soon as it offers value and is vetted through testing.
Testing is Part of the CD Pipeline: Frequent delivery is only secure if each iteration is tested. Testing can begin at the start of the development process before new features are fleshed out, and testing keeps going until the features are delivered.
The Core Principles of Continuous Delivery
The core principle behind Continuous Delivery is the move to an Agile development process and organizational structure. Agile should be applied across all the software and related infrastructure and components and drive Agile CI/CD pipelines. However, without a regulated pipeline to help deliver changes effectively through your infrastructure, it can unintentionally expose your organization to risks. Our Continuous Delivery for the Continuous Enterprise whitepaper goes into detail about CD/CI.
Here are four more principles of CD:
- Automating the Software Delivery Pipeline
- Maintaining a Reliable and Consistent Codebase
- Extensive Test Automation
- Collaborative Development and Continuous Feedback
Key Elements of Continuous Delivery
Version Control Systems (e.g., Git)
Version control is a critical software development component as it helps prevent software from being based on mixed versions rather than completed and tested software components. “Git, an open-source revision control system and one of the most popular tools for developers, can work with Chef. This topic is explained further in the Automated CI/CD Pipelines with Chef and GitLab blog.
Build Automation Tools (e.g., Jenkins)
Agile development is based on CI/CD processes and supporting tools which together drive CI/CD pipelines. CI/CD automation tools (Jenkins, Azure DevOps, Docker, etc.) help developers create, use and enhance agile workflows. These workflows define how code is developed and deployed, creating standardized practices for team members to follow. Once the workflow is established with confidence, it can be automated.
Chef Continuous Delivery features integrate with all these automation tools. Chef artifacts can be easily validated and deployed to diverse environments, easing the automation of workflows.
Chef and Jenkins
The main goal of Continuous Delivery is to get changes into production quickly, completely, safely and sustainably. Tools such as Jenkins have enabled DevOps teams to help define pipelines that trigger automated workflows on demand. With that said, organizations may have applications written in different languages or deployed on different operating systems or in the cloud. This variance can increase the overhead necessary for managing pipelines at scale. If your team is considering Jenkins as part of their workflows, you can learn more in our Chef/Jenkins Better Together blog.
Chef Habitat mitigates these issues with a consistent methodology for defining an application’s dependencies, all the steps needed to build and install it and the configurable settings to manage it.
Containerization and Orchestration (e.g., Docker and Kubernetes)
Developers are increasingly turning to containers to deliver and run more modular software. “Container solutions have provided organizations with the means to deliver applications in a way that’s lightweight, immutable, and portable. This, in turn, enables the creation of highly efficient, distributed architectures for their environments,” the Chef and Kubernetes page said. However, while Kubernetes has certainly helped organizations, there are still numerous creation and maintenance challenges to face, including:
- Opaque Containers: Inspecting and determining what exactly is running in a live container can be difficult.
- Security & Compliance: Detecting which containers and/or pods are affected by new regulatory requirements or threats and then planning remediation is not straightforward.
- Non-Cloud Native Apps: Migrating older apps using a “lift and shift” approach moves the app and everything else running along with the app, resulting in bloated, hard-to-manage containers.”
Deployment Automation
As captured in our Embrace DevOps eBook, the key is to automate everything. Using code to represent tasks is critical, as it brings process and policy standardization across the organization. For example, simplifying processes into repeatable functional code makes it easier to automate development and deployment processes while greatly reducing human errors.
The end result is Continuous Automation. This process involved the automation of each part of an application’s lifecycle to build and deploy software and changes in a fast, consistent and safe manner. Our Understanding Continuous Automation blog states that it integrates automation of infrastructure, applications and compliance, defining elements as code to make it simpler to manage multiple versions, test for different conditions, adjust as needed and apply at scale.
One configuration automation solution is Red Hat Ansible. While Chef also provides configuration automation features, Ansible users can integrate the Red Hat tool with Chef. In addition to helping clients define and deliver infrastructure as code, Chef offers a variety of robust automated compliance and security solutions that can be used with Ansible. Using Chef Compliance Audit, clients can validate which Ansible server their connected to, understand application configurations and reduce system vulnerabilities. Our Chef and Ansible web page explains these capabilities in more detail.
Monitoring and Logging Solutions
DevOps monitoring often starts with the most fundamental question: “Is it up?” While it sounds like a yes or no question, there are gradations, such as how well the apps perform. Poorly performing apps stifle productivity and turn off customers.
Monitoring goes hand in hand with logging, as explained in our DevOps and Monitoring blog. DevOps teams use log management to keep track of information and make vital business decisions. It’s important to take a moment to understand what log management means, as numerous log files are automatically generated by several different users or types of hardware. This creates an ever-growing amount of data for teams to monitor. With log management, logs are centralized in one platform, using similar structures. Once logs are centralized and structured, they can be stored based on tiers of relevance, compliance mandates and need for analysis.
Benefits of Implementing Continuous Delivery
- Faster Time-to-Market
- Greater developer (DevOps) productivity
- Reduced Human Error
- Improved Quality Assurance
- Enhanced Team Collaboration
- Improved IT Code quality
Common Challenges in Continuous Delivery
- Facing ever-changing security vulnerabilities
- Lack of inter-team collaboration and communication
- Failure by all team members to use the same toolset and code repository
- Lack of version control
- No automated testing
Technical Debt
Technical debt is the aggregated cost incurred by not making optimal decisions when designing your software, developing the code and keeping it updated and maintained. Some of these costs come from subpar performance, unreliable and unsafe software and an inability to scale. These issues can also damage development team morale and end-user satisfaction.
As stated on the Chef Continuous Delivery page, “Continuous Delivery is a practice of delivering software in small and frequent increments that can be released at any time. This helps avoid or minimize technical debt that results from long and complex development cycles, integration issues and deployment failures.”
Security and Compliance Concerns That Lead to Technical Debt
- Reliance on manual processes
- Lack of teamwork, communication and commitment to common goals and processes
- Imperfect pipelines, including lack of visibility
Tooling and Integration Issues
- Siloed development solutions
- Lack of commitment to use common tools
- Failure to adopt a CI/CD pipeline that demands automation, version control and rigorous testing
- Lack of integration between development-related pipeline solutions
Best Practices for Implementing Continuous Delivery
Doing Continuous Delivery right and optimizing its advantages requires adherence to some key best practices. Here are a few:
- Follow a Clear Strategy
- Create Robust Testing Tactics
- Embrace a DevOps’s Decision-making Mindset
Moving to DevOps, and beyond to DevSecOps, creates a new software mindset. Adopting these practices is an important step for organizations looking to increase the speed of software development and application delivery. With DevSecOps, automated security and compliance testing are embedded in the software development lifecycle. Our Continuous Delivery for the Continuous Enterprise whitepaper explores these topics in greater detail.
Leverage Progressive Deployment
Progressive deployment is the idea of frequently deploying changes. These small changes are not disruptive and minimize the amount of feedback developers must respond to.
According to the Spiceworks article, How to Use Progressive Deployment to Address Dev Team Burnout, “Progressive deployment is a technique for releasing new applications that enables organizations to manage the number of users exposed to a new production code. It includes a variety of deployment strategies to progressively manage the ‘blast radius’ of a production code change, modulating the size of the audience exposed to code in a controlled manner.” The article goes on to explain that, “Automated Continuous Deployment solutions enable developers or DevOps engineers to simply press a button to activate deployment pipelines. The process then executes the mundane yet complicated tasks necessary to reliably deploy code and eliminates unnecessary human intervention that often leads to human error.”
Here are some Progressive Deployment benefits:
- Software is rolled out to a subset of the user base and only deployed more broadly when the software performs safely and well.
- Poor software can be rolled back to a previous version.
- These progressive rollouts ease troubleshooting.
Monitor and Measure Everything
The old saying “You can’t manage what you can’t measure” applies to software development just as well as it does to any other area of business. Here, your application development operations should be judged by key digital performance metrics.
One of the most well known systems of measurements is provided by DevOps Research and Assessment (DORA) group. Over the last decade, the DORA group has established four key metrics for helping companies assess the state of their digital performance:
- Deployment frequency: How often a company releases software to production.
- Time from commit to deploy: The average length of time it takes between committing a change to a version control system and deploying that change to production.
- Change failure rate: The percentage of changes that result in poorer service or require remediation such as a patch or a rollback.
- Mean time to resolve: How long it takes to restore service when such a failure occurs.”
Our Chef Continuous Delivery for Continuous Enterprise whitepaper goes into this topic further.
Continuous Delivery Enterprise Case Study: Discount Tire
Discount Tire boosted its application delivery with the help of Chef. Discount Tire continuously seeks out new and innovative approaches that lead to better customer experiences. To support this effort, the Discount Tire app delivery teams needed the ability to more easily test drive and adopt new technologies, many of which are built on cloud-based architectures and different flavors of Linux. As a result, the Discount Tire team didn’t want to be locked into their legacy Red Hat infrastructure and decided to migrate from Satellite to Chef.
This started with migrating its website to AWS, which meant a move from Satellite to Chef. Discount Tire has been able to take advantage of the Policy-as-Code approach in Chef to consolidate management of its on-premises instances and AWS configuration policies while automating its patching process and accelerating application delivery.
Why Choose Chef for Your Continuous Delivery Solution?
How Chef Fits into Continuous Delivery Pipelines
Most organizations already have source control, build servers and technology provisioning processes. Chef doesn't replace these tools but makes them easier to manage, scale and validate. For example, tools like Jenkins require users to create and maintain individual pipelines for each application. Chef creates universal artifacts that can be consumed by any pipeline automation tool (Jenkins, Azure DevOps, Buildkite, etc.), deployed to almost any environment (Windows, Linux, Docker, Cloud Platforms, Kubernetes, VMware, etc.) and validated in real time.
Find more information on Chef Continuous Delivery Pipeline Automation Tools.
Continuous Delivery with Chef Enterprise Automation Stack
Continuous Delivery accelerates the rate at which companies can promote software across environments. More testing is done during the build phase with the idea that the sooner you can find and fix defects, the faster teams can release quality applications. But scaling Continuous Delivery across applications, change events and environments is not easy; it requires an integrated toolset that can be used across an ever-increasing number of technologies in rapidly growing environments.
Chef Enterprise Automation Stack is an automation platform that helps DevSecOps teams build, deploy, manage and better secure any application running on any infrastructure:
- Align teams via a common set of tools and processes.
- Embed compliance testing in every stage of the technology lifecycle.
- Enable consistency, velocity and greater security in application delivery to any infrastructure.
Chef Enterprise Automation Stack is powered by four core Chef projects: Chef Automate, Chef Infra, Chef Habitat and Chef InSpec.
- Enterprise dashboard and analytics tool enabling cross-team collaboration with actionable insights for configuration and compliance and an auditable history of changes to environments.
- Chef Infra - Infrastructure automation capabilities to configure and remediate any number of systems across desktop, cloud and private data center environments.
- Chef Habitat - Automation capabilities for defining, packaging and delivering existing and modern applications such as those that are in containers and composed of microservices.
- Chef InSpec - Automation capabilities to define and continuously test and enforce security and compliance standards on-premises and in the cloud.