Tools are inherent to our jobs, inherent to
how we solve the problems we face each day. Our comfort level with the set of
tools that are available to us, and our ability to adapt to new tools as they
evolve and shape our thoughts and ideas. The availability of collective
knowledge within the palm of your hand combined with the collaboration across
organization and company boundaries through open source software is
dramatically disrupting the status quo of work. Companies mired in managing
infrastructure configuration management by hand with unknown numbers of
divergent systems, unable to quickly change and respond to market demands will
struggle against their counterparts who have managed to contain their
complexity on one axis through infrastructure automation. While it is possible
to manage servers by hand, or even artisinally crafted shell scripts, a proper
configuration management tool is
invaluable especially as your environment
and team changes.
Even the best software developers will
struggle if they are working in an environment without a version control system
in place. Tools matter in that not having them, or using them incorrectly, can
destroy the effectiveness of even the most intelligent and empathetic of
engineers. The consideration you give to the tools you use in your organization
will reflect in the overall organization’s success. You’ll find that what is a
good tool for some teams might not be a good one for others. The strength of
tools comes from how well they fit the needs of the the people or groups using
them. If you don’t need feature X, its presence won’t be a selling point when
considering which tool your organization should use. Especially in larger
organizations with teams numbering in the dozens, finding one tool that meets
the needs of every team will be increasingly difficult. You will have to strike
a balance between deciding on one tool that will be used across the entire
company consistently and allowing more freedom of choice among individual
teams. There are benefits to both the consistency and manageability that comes
from having only one tool in use in an organization, and also from allowing
teams to pick specific tools that work best for then.
Because DevOps is a cultural shift and
collaboration (between development, operations and testing), there is no single
“DevOps tool”: it is rather a set (or “DevOps toolchain”),
consisting of multiple tools in the Delivery and Deployment pipelines.
Generally, DevOps tools fit into one or more of these categories, which is
reflective of the software development and delivery process:
- Plan – Planning Tools
- Code — Code development and review, version control tools, code merging;
- Build — Continuous integration tools, build status;
- Test — Test and results determine performance;
- Release — Change management, release approvals, release automation;
- Deploy — Infrastructure configuration and management, Infrastructure–as–Code tools;
- Operate and Monitor — Applications performance monitoring, end–user experience.
Though there are many tools available,
certain categories of them are essential in the DevOps toolchain setup for use in an
organization.
Tools such as Docker (containerization), Jenkins (continuous integration), Puppet (Infrastructure-as-Code) and Vagrant (virtualization platform)—among many others—are often used and frequently referenced in DevOps tooling discussions. Typical stages in a DevOps toolchain looks like this