“For continuous delivery, software should always be in a production-ready state”
This is the third blog in my DevOps series (after my earlier blogs A practical approach to DevOps adoption, and Cultural transformation is crucial for DevOps success), focused on the critical role of automation and continuous delivery processes in a DevOps setup.
Everything in DevOps is structured around a “continuous” culture, built into every facet of the software value chain. When you are dealing with lead times that are often in hours and days, an end-to-end continuous process encompassing all vital phases such as development, integration, testing, delivery and deployment is the absolute bedrock on which the success or failure of DevOps depends.
The first step to facilitate continuous delivery coupled with rapid deployment is to have a robust process of continuous development. In practice, without an exception, this entails having an iterative mode of software development with a mature implementation of agile practices. A continuous cycle of development also mandates a seamless cycle of integrating feedback from customers, operations, and business front into the requirement backlog/pipeline. Culturally, this will force the developers to build quality into their code, and makes it mandatory to run basic unit tests prior to committing the code for check in.
Continuous Integration (CI)
Continuous integration is much more than a process, and is an amalgamation of a set of best practices. First and foremost, CI forces you to discard with the notion of treating ‘integration’ as a separate, stand-alone phase that sequentially follows development, and will facilitate early discovery of any potential errors that may result from integrating the code developed by disparate developers. CI demands the adoption of the following best practices, supported by suitable automation:
- Frequent check in of unit-tested and unbroken code at periodic intervals into a single source repository
- Automation of build process at a preset schedule
- Automated execution of integration tests
- Generation of alerts to all stakeholders on the success/failure of build
- Labeling of every build to ensure traceability, track changes, and facilitate reversion
One of the biggest cultural changes that DevOps brings about is, a shift away from a “Big Bang” testing phase. In a DevOps environment, everyone is involved in testing, from developers to operations personnel. Developers have the responsibility of running unit tests, and check in only error-free code. Dedicated testers don’t wait until the end of development, and focus on facilitating, rapid and automated testing through appropriate tools. Operations personnel run appropriate tests to ensure that the application is validated for critical performance metrics such as load and stress.
Test orchestration and automation is a vital component of DevOps culture, and will ensure the elimination of potential delays and quality issues, that are the norm for “testing is an end of the dev cycle” approach. A well executed testing strategy, supported by suitable automation will ensure the following:
- Creation of virtualized test environments that can be easily deployed, and updated resulting in shortened test cycles
- Verifies that every code change is well tested and integrated
- Automated regression tests will validate bug fixes, and verifies that new code doesn’t blow up the existing functionality
- Automated functional tests will validate the new functionality, and also ensure that old functionality is not disturbed.
- Performance testing will ensure that the new functionality/new code doesn’t adversely impact the performance metrics of the application/software
Continuous delivery & deployment
Continuous delivery and deployment are the final, logical steps to reach the DevOps goal. Continuous delivery focuses on ensuring that every code change is well tested and integrated, and is ready to be deployed to a production environment, with as little human intervention, and with as much automation as possible. This is a vital step in the DevOps process, and establishes the organizations ability to continuously develop, test and deliver code in a streamlined, repeatable, and predictable process.
Continuous deployment is the next step to delivery, and in an ideal scenario, even this step can be automated. But very often, from a practical perspective, this phase is driven through the business needs of an organization.
Automation of the above cited continuous processes will vastly reduce the scope for human intervention, and greatly enhance the quality, performance, and security of the deployed software/application. While DevOps is much more than automation, it plays a critical role in enhancing quality, and reducing lead times by automating most of the repetitive tasks across the software value chain.