Continuous delivery is a process designed to dramatically speed up the delivery of software into production. Martin...
Fowler defines continuous delivery as an approach to building software so that it is ready for release into production at any time. He also points out that two key aspects are necessary to achieve continuous delivery: automation and a collaborative culture (where everyone involved in the software development lifecycle is part of the team). In my first article on continuous delivery, I described how the process, although it is a disruptive technology, leads to continuous improvement. In this article, I discuss the automation process and the automation tools needed to implement continuous delivery.
Like automating any process, automating continuous delivery begins with discovering and documenting the manual processes, from development through deployment. This may be a bit complex because it involves different areas within IT, including development, test and quality assurance, systems administration, and operations. Moreover, each team has a different focus, which adds to the complexity. Once the processes have been documented, analyze them to determine the most time-consuming and error-prone components. These components are the most important candidates for automation. Because continuous delivery involves multiple processes, each with a different goal, complete automation will involve multiple tools, including version control, configuration management, code review and monitoring.
Continuous integration, the basis of continuous delivery, is the most critical process to automate. Continuous integration is a process whereby developers check the code from their individual branches into the main line of code multiple times each day. These integrations must be checked against the version control system and regression tested against the main line of code.
Let's look at some of the most popular continuous integration tools. Among the open source tools, the most popular are Hudson, Jenkins and CruiseControl. On the commercial side, Microsoft's Visual Studio Team Foundation Server (TFS) is widely used. All of these products integrate with automated functional and unit test tools.
Hudson, a popular open source continuous integration tool, was developed to focus on build and test and on monitoring external jobs. Two of its most important features are its ease of use and its many plug-ins. Hudson is simple to install and configure, and has a self-explanatory user interface, which shortens the learning curve.
Although Hudson is primarily designed for Java, plug-ins are available for C#, Python, Maven, Ruby and others, and it integrates with Selenium (also open source) to create functional and regression tests for Web applications. Plug-ins are also available to integrate with software configuration management tools, unit test tools, security tools and code coverage and analysis tools. Hudson provides a tool for writing plug-ins, and integrates with various application servers and virtual environments.
Jenkins, also an open source continuous integration tool, provides many of the same features as Hudson. Jenkins is easy to install and configure and provides plug-ins to integrate with most test tools, servers and environments; it also provides a tool for developing plug-ins. Hudson and Jenkins both have their origins with Oracle, so they are quite similar, with only slight differences in the plug-ins.
CruiseControl, one of the original configuration management tools, is used widely in the software development industry. It supports most test tools and can be used on most application servers and virtual environments. It is highly configurable using a central XML configuration file, which can be edited through its own GUI or directly. However, configuring CruiseControl is much more complicated than configuring Jenkins and Hudson. CruiseControl's strength is its monitoring tool. It continuously monitors the SCM servers and triggers a new build when changes are detected. Its notification feature is also its strength because it supports most social media including email, Jabber IM, RSS feeds and blogs.
On the commercial market, Visual Studio TFS is a full application lifecycle management tool. It provides all of the important features of a continuous integration tool, including configuration management, version control, unit test tools, defect tracking and monitoring. It provides extensibility and can be configured to work with most tools. It also includes integration with Microsoft's project management tools, including Project and Excel, and it integrates with SharePoint by providing a team portal for centralized communications.
Several factors are critical to implementing continuous delivery successfully. First is being able to automate integration into the mainline; every developer has to commit to the mainline every day, rather than have extensive branches that exist over a period of weeks. Second, building is constantly occurring, at each commit to the mainline. This includes automating smoke tests at the end of the build so that obvious integration problems and other errors are caught right away. Last, because the focus is on delivering working software, developers, testers and release engineers have to work closely together to make sure that every commit and build is tested and validated.
Read more about continuous delivery in ALM
Learn about why one CTO is advocating for automated tests and continuous delivery