Continuous Delivery/Deployment has become indispensable for companies that plan to introduce new features to their customers quickly and regularly. Continuous Delivery model of software development helps companies do smaller but frequent code pushes to production and subsequently help release features that are more stable and reliable. Continuous delivery emphasizes a collaborative working relationship across teams such as Testing, Support, Development, and Operations to deliver the product by automating and streamlining the build, test and release process.
As industry experts say, Continuous delivery is a set of practices rather than a set of tools. However, having the right tools is absolutely necessary to facilitate better process and communication across different teams working on continuous delivery. This article shares some insights on the integral components on the path to Continuous Delivery and the various tools that are used to enhance its effectiveness.
The path to Continuous Delivery/Deployment starts with Continuous Integration (CI). CI is not a tool but a practice that demands code check-in all the time and asks the developer never to check-in broken code or code that is not compiled. In the absence of CI, developers run the risk of writing code that works fine when run in its own branch but collides when run with code residing in other branches and breaks the application.
There are lots of tools available to implement CI. A CI tool regularly checks the version control system for changes to the application, builds the application and runs automated tests on every build. CI tools also provide information on whether the build passed or failed the tests. Jenkins, Bamboo, Hudson and CruiseControl are some of the commonly used CI tools.
As many of us know, version control is used to keep a record of every change. While developers use version control to manage code changes, testers can use it as a repository to record all their test scripts, test plan and other artifacts and operations team can use it to maintain the infrastructure configuration changes across environments. Without version control, continuous delivery cannot happen.
CVS, Wincvs and Perforce are some of the version control tools that have been around for a long time now but Git currently enjoys a lot of support from teams that work on Continuous Delivery. Subversion and Mercurial are other tools used for version control.
Code reviews are a natural extension to Continuous Integration and Version Control. Code review tools help developers decide which changes are acceptable before merging the changes with the main code base. Gerrit, a free code review tool integrates well with Git. Git and Stash have built in ability to review the code.
Also, tools like SonarQube, Checkstyle helps to detect the efficiency of the code written, thereby making the software conform to all the standards defined and to rinse the code before it hits the repository.
Dependencies include external libraries, components and modules used by the application. JAR files, DLL’s and Ruby Gems are some examples.
Build tools such as Maven, Ant and Phing help to manage dependencies. Latest entrants to this list include Gradle and Ivy. A tool like Maven helps to recreate environments on different machines as well as manage dependencies in a centralized fashion.
Dependency Management and Configuration Management are two important components of Continuous Delivery. Tools like Ansible, Chef and Puppet help in Configuration Management.
It is important to collect and analyze data on production and test environments. Tools like Nagios, Splunk help continuous delivery teams by providing a date on infrastructure performance.
While constructing software, there is a chance for a block of code that is orphaned out entirely – a piece or block of code that is unreachable. Such instances are common and can hinder the project when such cases accumulate in the software over time. Code coverage tools such as Cobertura, JaCoCo, JCov helps to excavate these issues and thereby aid in delivering quality code.
Despite using the tools mentioned above, implementing Continuous Delivery requires discipline and commitment from the team members involved. Aspire Systems has successfully consulted global firms on Test Automation and Continuous Delivery and helped them implement Continuous Delivery with the right set of tools and processes.
Often testing is seen as major bottleneck in releasing software to production. However, it is one of the most crucial activities in order to ensure software under construction a success. Traditional software testing methods are time consuming and do not fit continuous delivery. In order to enable continuous delivery continuous testing is the way forward. It is a key enabler of continuous delivery and a process executing automated tests in continuous pipeline. Only Test automation is not continuous testing. Continuous testing is a paradigm shift from testing when possible to testing when needed. It is process of conformance of completing of continuous integration. In a continuous delivery world, change is not integrated if continuous integration completion is not confirmed. It is all about testing early, testing often, testing everywhere and automation.
Blueprint of Continuous Delivery