Without people and process changes in place, an organization will not fully get the benefits of DevOps by implementing tools alone. Yet tools are important for true continuous deployment.
There are so many tooling options. How do you choose? How should you go about sifting through all the options? Well, it is easier than you think. With more and more companies striving for continuous delivery, a common design pattern has emerged which helps to structure and group the types of tooling options available.
Break the delivery process into two main phases: building components and releasing software. The types of tools that represent the DevOps infrastructure fall into those same categories: tools that manage the build process and tools that manage the release process.
Let’s start with build management, which consists of tools that build, compile, package, and version code so that it can be redistributed as needed. This would include a Source Repository, Build Console, and Package Repository.
A Source Repository tool is a version-controlled single repository that houses and manages the entire code base from development to infrastructure. It handles multiple versions and can both identify and reconcile conflicts in code submitted by different developers. The same repository should also be used to support the operations team. It really doesn’t matter how it is organized (one module or broken into sub-modules) as long as it is the one common place to house all code (software and environment). A couple of examples are Perforce and Subversion.
A Build Console is a tool that that pulls from the Source Repository to organize, control, and manage code builds. Ideally it has a with a web UI and web API to make status reporting intuitive. This allows teams to easily see what is being built, what phase the build is in, and error logs. Some examples include Cruise Control or Jenkins.
The center of this tool chain is the Package Repository, but can also be called a package management system or package manager. This tool groups software together into functioning packages that can then be pushed to release. In the DevOps world, those packages include infrastructure builds. The database of dependencies and versioning for both software and infrastructure enable an error-free repeatable build process.
The Package Repository is the bridge from Build Management into Release Management. It is where built code comes together with infrastructure requirements to form complete packages that will be installed during deployment. Tools include Nexus or Artifactory and system-level packaging tools like App Git.
The Source Repository begins to bring development and infrastructure into one location supporting versioning, quality management, and team member accountability.
The Build Console allows code to be organized and prioritized, enables status and error reporting which brings enhanced visibility to the project status and schedule overall. And the Package Repository, packaging for both infrastructure and software enables consistency and security in releasing the total solution. You can see how these tools enable a culture of open communication and collaboration critical for DevOps.