Information Technology is constantly evolving from one state to another. Like a periodic explosion of new fauna on Earth, IT can change just as drastically seemingly overnight, and with a plethora of new tools, philosophies, and ideas.
DevOps and Agile are the latest major shifts in IT. Those who do not continue the evolutionary step forward may find themselves falling behind, in salary and title.
For a system administrator, you should understand what Agile is. It’s not something that aligns well with operations, but it is how most development shops follow. Any solution you build out will heavily influence how agile your development team can be.
Choose a Path
DevOps can be split into two distinct roles: Infrastructure automation and Development Pipeline Automation. In a startup, you may find yourself in both.
To prepare for your move into DevOps you will need to understand which direction to go in. To really stand out and maximize your potential, you should have an understanding of both.
Infrastructure Automation, or Operations as Code
“Servers as cattle, not pets” has become a motif for today’s DevOps. We no longer need to baby our servers, caring for them and healing them when things go wrong. Rather, we want to shoot them in the head when I’ll, knowing a new, fresh instance can replace it at a moments notice.
The key to treating servers as cattle is to codify its existence. Several tools have spawned to fulfill this step — Ansible, Chef, and Puppet.
Infrastructure as Code
Simply codifying our server configurations is only a small part. Orchestration is key to succeeding in automating infrastructure. We need to also turn our infrastructure into code.
Again, the goal is to be able to destroy a segment of your infrastructure and bring it back online in a moments notice. Or to be able to add new segments instantaneous with one command.
The cloud thrives on orchestration. Providers such as AWS and GCP have entire toolsets for it. There are even tools outside of those platforms that provide the same ability.
Version control isn’t just for Developers anymore. It’s now a requirement for codifying your infrastructure.
Tools like Git allows us to maintain a history of all changes. Additionally, to provide a mechanism to easily share our work within a team.
Learn Basic Programming
Tooling will only get you so far. Mastering automation requires that you can do some programming. Don’t let that terrify you. You ’re not writing highly optimized, complex code for the Department of Energy.
Learn the basics of languages like Python, Ruby, and Bash. Doing so will empower you to write even better Ansible, Chef, or Puppet configurations.
Outside of tools, learning one or all of those languages will help you solve last mile or edge case problems with ease.
Agile and Pipeline Automation
Long gone are the days of quarterly or yearly releases. To stay relevant in today’s appy society, a constant stream of features need to be released.
Product owners push new features, heavily based on user behavior and requests, to the development team. Following scrum, development release windows can be as little as one week in length, for example.
In an Agile environment, code changes are constant. Merging those changes into the master branch of a Git repository, for example, needs to be done frequently and safely.
We call this Continuous Integration. We are integrating new code changes into our release code base continuously or very frequently.
Integration pipelines perform several tasks. They pull the latest code from the repository, unit test it, and perform static analysis. So long as those tasks were successful we attempt to merge our changes into a release branch.
We can automate this task to run every time changes are pushed to a specific branch.
A build typically follows a successful integration. If the code compiles successfully an artifact is generated.
Artifacts can be an executable binary, a non-executable binary, or even a tar file — it’s the final package of a build.
Once we have an artifact we typically publish it to a repository. A repository allows us to deliver our application to wherever it needs to go, quickly and easily.
It allows us to maintain a history of builds for easy rollback and auditing purposes.
Summarizing DevOps Skills
Great. You’ve made this far without being scared off. Let’s summarize the skills and tools you should learn.
Choose at least one item from each category, and endeavor to understand it well. Learning an additional item will be much easier.
Scripting and Programming
I list YAML and JSON with actual languages. They are not, in fact, languages, but they are document types that are heavily used within DevOps.
These are the three most popular amongst config management tools. Going back to learning a programming language, to accel with Ansible you should understand Python. For Chef and Puppet, learning Ruby will make you more proficient.
- Hashicorp Terraform
- AWS Cloudforms
The following are the two most popular. Emphasis on learning Git, as most companies who are not using it have plans to migrate to it. However, tools like SVN still have a strong standing.
Outsourcing build automation to SaaS solutions like CircleCI has become ever popular amongst developers. It’s also the easiest to get started with, if you have some development background. Jenkins is free and open source but has a steep learning curve in comparison. It’s also the swiss army knife of build automation, and an important tool to learn.
- Docker Registry
After you deep dive into at least one item in each category listed above in the summary, you need to prepare for your first interview. The challenge here is that every organization has their own concept of what DevOps is. It’s really difficult to be fully prepared.
Understand the organization’s engineer team. Browse through job postings for developers as well as system admin roles. This will give you a good idea of what tools they use, which will help you prepare.
They may want someone with Jenkins experience. However, not every environment uses Jenkins, but showing an understanding of development workflows, build tools and pipelines will help you. Understand how code moves from a developers workstation to production — from code integration, to builds, to packaging, and finally to delivery.