Working in DevOps sounds like an ideal role, but is it the type of job that you want? There's a good chance you're doing it already, particularly if you're working in a small team. This series will give you some pointers on areas that you should be more familiar with if you want to be considered a "DevOps person."
The standard definition of DevOps is at the intersection between Development, QA, and Operations. Chances are that you already cover two out of three of these disciplines, so take heart that you're more than halfway there.
Although DevOps is an area that is constantly evolving, there are a set of core skills that you should have a handle on, including Continuous Delivery, operations, databases, scripting, and security. Databases, scripting, and security are huge topics in their own right, so in this article, we'll cover both the Continuous Delivery and operations aspect of things, as these fall neatly in what is considered mainstream DevOps these days.
Making sure that you can produce software in short cycles is a crucial skill for any professional development team. This means that you need to put systems in place where small changes are added in and trigger automated test, build, and deployment cycles. While this sounds simple and there is a lot of tooling out there to help you achieve this easily, the crucial part is having tests in place that guarantee quality is built in.
Don't forget that sometimes you can't automate everything, so as well as having your standard suite of unit tests, you may need to add in some manual testing from the QA team. This can be dealt with by having a staging area for your deployment, where it goes through a set of manual tests, before the QA team mark the build as suitable for production. Wondering what should be automated? Check out When to Automate and Why from Thoughtworks.
So, what tools will help you achieve this?
The most popular Continuous Integration solution these days is probably Jenkins, with a huge number of plugins that help with building, deploying, and other automation tasks in your project. No matter what language you are developing in, Jenkins does have solutions for your project.
There are other CI systems that you should at least be familiar with, such as TeamCity from JetBrains and Bamboo from Atlassian, Microsoft's Team Foundation Server and Travis CI as another open-source solution. Most of these have similar functionality, so your decision might be based on sticking with a particular vendor. For example, if you already use Atlassian tools, Bamboo might be a natural choice. If you're starting fresh, this comparison of CI tools based on their basic features and integration with source control systems should help inform you.
Here are some resources that will help you along the path of Continuous Delivery:
- Preparing for Continuous Delivery
- Continuous Delivery with Jenkins Workflow
In the end, it all comes down to confidence in your build system and process. With the right workflow in place, the idea of deploying a bug fix to production is no longer the daunting project that it once was.
Deployments are a core part of what DevOps is all about. You want to make everything simple and repeatable so that any of the development team can spin up their own instance of your application or development environment. And, all going well, you'll need to scale your application. This is where containers (and Docker) come to the fore.
The first thing I think about when I hear "DevOps" is Docker. It has become the default container solution, giving the ability to wrap up everything into a single package that can be deployed and replicated on any machine. To get a good handle on how Docker works, the best thing to do is play around with it. There's no better place than the official Getting Started documentation. Once you know what you need to put together, check out Docker Hub for images that people have already created.
To move your container game to the next level, you might want to look at Kubernetes, which is also open source and allows you to automate deployment, scaling, and balancing of application containers across clusters of hosts.
These resources will give you a good introduction into the broad topic of containers:
Deployment Management Tools
Containerization might seem like a big topic, but the amount of options will look limited compared to the set of tools available for deployment management. Here are just a few of the most popular ones in use today.
Ansible is probably the most popular among all deployment tools, with a simple YAML syntax that allows you to create Ansible Playbooks to describe automation tasks. These automation tasks cover application deployment, configuration management, and orchestration. Find out more about it in Getting Started With Ansible.
Next up is Chef, probably one of the oldest tools in the configuration management landscape, introduced in 2009. Ruby and Erlang are the languages used in to create your cookbooks. While a few years ago Chef might have had the larger community, Ansible is probably the most popular now, thanks to its simplicity.
Apart from those options, you also have Puppet, Salt, and Fabric to investigate, each of which has its own advantages. Still confused abut the right deployment management tool to use? Check out this commentary or this comparison for more detail.
Lastly, you'll want to look at a tool like logstash to store and process logs from a variety of sources, whether it's server logs, databases of any of the other supported input streams. Use it as part of the Elastic Stack along with Elasticsearch and Kibana to make this data easy to search, present, and visualize.
As a DevOps engineer, you'll never have a lack of available tooling. Check out this DevOps Tools Showcase from GitHub to see other popular tools that you should consider. It all depends on what your technology stack is and what you need to achieve.
Here are some more resources from DZone to help you in this area:
The Human Aspect
One of the final skills that you need in this role is great communication skills. For example, you need to be able to deal with "emergencies" without falling into panic; a server instance will go down at some hour you are not in the office, and you may be called on to deal with it. Ideally, the monitoring that you have put in place will let you know before anyone else notices.
As an expert in so many areas, you will also need to mentor others into understanding the systems and tools that are in place. To do this you'll need to be clearly articulate architectures, processes and the right way to do things, without sounding like you are preaching at the team. Sometimes that's the hardest skill to find!
For more on this topic, check out Max Zaharidis's piece on HumanOps, with a collection of questions, principles and ideas aimed at improving the life of sysadmins.