If the overall intention of DevOps is to allow for more efficient collaboration across various teams involved in a project, then the tools an organization brings in must aim to foster DevOps principles at all levels – from initial planning to working environments, deployment schedules, and future issue reporting. Luckily, in the current tech climate, there are a number of tools readily available to suit the needs of almost any company or organization out there.
These tools can often be grouped together based on their purpose and place in the project: Collaboration and project management tools, configuration management, source control and working environments, continuous integration and deployment tools, and monitoring solutions.
Collaboration and Project Management
This is twofold: Project teams need to be able to communicate effectively at all levels — from quick questions to large-form planning – but there also needs to be a place for team members to review project goals, meet deadlines and make reports.
Collaboration must go outside of the basic communication needs of the team, however. This is where project management solutions like Basecamp, JIRA, and Trello come in. Whether using Scrum, Kanban, or another project management-style (or none at all), these tools allow for the project to be laid out into tasks, assigned, tracked, and reported. This way everyone involved has a “hub” to check for what’s been done, what needs to be done, and any hiccups along the way.
Consistency is often a key point in successful builds. Both system administrators and developers need to know the limitations, requirements, and actual builds of any systems used. Configuration management solutions, like Puppet, Chef, and Salt, are often the solution to DevOps-inspired system building.
These services often treat “infrastructure as code,” in that the system configurations are laid out (often on a master server) and then run by agent applications on the actual servers to build out the needed systems. These tools ensure that every server is built the same, based on the administrator’s pre-defined conditions — with variances between server types, as needed. Configuration management tools also often allow for the use of “environments” for testing, staging, or production servers.
Configuration management often ties hand-in-hand with ensuring developers are creating their code in an environment as close to production as possible. Spending time trying to determine why code that worked on a developer’s computer isn’t working on live servers only detracts from real work that needs to be done. Solutions like Vagrant address this problem by providing users ways to spin up consistent development environments with a simple command. Vagrant, in particular, can also work with Puppet, Chef or Salt to consistently bring up and throw away close-to-production environments.
More than this, team members need to be able to share their work, track changes made to the code, and merge their work with the work of the greater project. Version control systems like Git or Mercurial provide a solution to this, by allowing users to do all of the above and more.
Continuous Integration and Deployment
Generally speaking, continuous integration entails developers merging changes to the main pipeline several times a day. Because of this, once working environments are configured, there needs to be a fast and succinct way to take these merges changes from the version control system (usually Git), test, and push them to production. These are tools and products like Jenkins, Bamboo, and Travis CI; they often offer integration to other, popular DevOps tools and push out builds when triggered.
Finally, the need for monitoring tools is paramount for both development and operations to succeed. Tools need to provide clear, understandable logs. These logs need to be shared with the right people, at the right time — just as the correct administrator or developer needs to be paged when there is a problem under their watch.
Monitoring solutions can be used for more than just alerting people when something breaks and diagnosing problems, however. Tools that allow users to monitor trends, parse, and understand your log data (such as in an ELK stack), can help diagnose trouble areas in code or on the servers, prepare the team for potential outages, and overall offer a wider scope of understanding.
No one company’s toolchain is the same as another’s, and when planning a transition to DevOps, it’s essential to view your company as a living organism. There are countless tools for any of the categories above, and custom solutions can be viable for companies with the size or bandwidth to make something in-house. Just remember: The tools presented should enhance the workflow, not hinder it, and make the DevOps experience one that benefits all corners of the project and all involved teams.