"Virtually everybody does continuous integration. Continuous deployment is kind of like the Holy Grail" - Theo Kim, head of DevOps engineering, GoPro
Competition in the software market has compelled organizations to allocate their best resources to develop and deliver high-quality software at an accelerated pace. The key to this level of agility is establishing a highly collaborative and communicative relationship between Development and IT Operations.
The Modern Shift
The term “DevOps” first emerged in 2008 with an aim to enable Software Developers & IT Operations professionals to work together create applications quickly and efficiently. Ten years later, DevOps has been integral to the success of many organizations, including huge companies such as Amazon, Netflix and Fidelity Worldwide Investments - organizations with huge customer bases that demand superior services and accessibility.
On the surface, DevOps hardly appears to be ground-breaking technology: enabling teams to work together to deliver better and faster seems an obvious goal.
The Agile development process reduces development times by increasing communication between the development team and business stakeholders. But software projects aren’t complete when the last line of code is written and the last test case is passed. Applications must be packaged for release, deployed into production, monitored for possible issues, and enhanced with new features and necessary bug fixes.
Each of these post-development tasks take time, thus delaying the delivery of new features and business functionalities to users. DevOps brings in the agile focus on communication and collaboration between developers and the operations team, giving the process after the development equal responsiveness.
Today, DevOps is considered to be the most efficient method for software development. Using DevOps, software organizations can reduce development complexity, detect and resolve issues faster, and continuously deliver high-quality, innovative software. Continuous Integration (CI), Continuous DElivery (CDE), and Continuous Deployment (CD) are some of the practices that help organizations to be fast without compromising on quality.
Continuous Integration (CI) is a widely established development practice in the software development industry which aims at integrating the work products of individual developers into a central repository early and often. Members of the team integrate and merge their development work frequently. CI ensures early detection of integration bugs, resulting in a better collaboration within the teams, leading to a better quality product.
CI makes the process on integration simple, easily repeatable and enables organizations to enjoy shorter and more frequent release cycles, improve software quality, and increase overall productivity.
There are tradeoffs that should be taken into consideration, however. The CI process does not offer any additional quality assurances. Many organizations find that such an integration is costly and hence prefer manual procedures to ensure that the new code does not introduce new bugs, even if it means compromising on time. To reduce friction during integration tasks, CI relies on test suites and automated test execution. It’s important, however, to realize that automated testing is quite different from continuous testing.
Continuous Delivery (CDE) is a natural extension of Continuous Integration, picking up where CI left off. Continuous delivery aims at ensuring an application is always at production-ready state after successfully passing automated tests and quality checks. CDE ensures that the software is bug-free by employing a set of practices for e.g CI and deploy automation, thus delivering the software automatically to a production-like environment.
Continuous Delivery depends on a deployment pipeline which is used by the team to automate the testing and deployment processes. The pipeline itself is an automated system that executes a progressive set of test suites against the build. In every segment of the pipeline, the build might fail a critical test, thus alerting the team. If not, it continues on to the next test suite, and successive test passes will result in an automatic promotion to the next segment in the pipeline. The last segment in the pipeline will deploy the build to a production-equivalent environment.
One of the best examples of a modern CI/CDE pipeline is available on AWS. Amazon offers an impressive CI/CDE pipeline environment and provides a walk-through procedure in which you can choose from many development resources and link them together in a pipeline that is readily configurable and easily monitored.
While many confuse Continuous Deployment (CD) to be the same as Continuous Delivery, this process distinguishes itself by going a step further by automatically and continuously deploying the application to production. With a goal to automatically and steadily deploy every change into the production environment, Continuous Deployment practice implies the Continuous Delivery practice, but the converse is not true.
While the final deployment in Continuous Delivery is a manual step, it is important to note that there are no manual steps in Continuous Deployment. As soon as developers commit a change, the change is deployed to production through a deployment pipeline. Also, Continuous Delivery practice can be applied for all types of organizations, whereas Continuous Deployment practice may only be suitable for certain organization types.
The organizations that employ a CD methodology will benefit from quick user feedback on their new deployments. Features get delivered to the users quickly, and any errors or defects that become evident can be handled immediately.
With the tremendous growth in adoption of DevOps, there has also been a significant rise in the automation tools that help with the implementation of CI/CD pipelines. These tools integrate with various developer tools, including code repository systems like Github and bug tracking systems like Jira. Also, as SaaS has become a popular delivery model, most of these tools are running on the cloud. Some of the most popular tools are GitLab CI, TeamCity, Bamboo, GoCD,Jenkins and Circle CI.