8 Skills and Technologies I Focused On to Break into DevOps
If you’ve worked in IT, this story may sound familiar…
You start out as tech support, eventually land a help desk role, gain experience, maybe get promoted to help desk level 2, or become an IT admin.
From there you gain enough experience to start working on systems as a sysadmin or systems engineer. This is where people usually get to a fork in the role: “Should I focus more on code, or operations?”
Well, if you’re a sysadmin looking to get into software or web development, DevOps is almost always the next natural step.
The primary goal for system administrators and engineers is to make it possible for employees in different departments to share information and work together more efficiently. Devops engineers are very similar in that they provide effeciency and optimization, but they connect software development teams with deployment teams.
Many people still have no idea how to break into software development and feel they’re stuck rebooting computers and fixing printers their whole life in ticket pergatory, but there is a way out (if you work hard.)
Who is this for?
First off, let’s get two things out of the way:
1) This is not the only way to go from IT/Operations to DevOps.
Nor is it the definitive best way, but, it is my way. You may have had a different experience and your mileage may vary, but this is how I went about it and while it may not be the most efficient, it’s just how it played out.
2) We’ve all seen this before: “DevOps isn’t a job, it’s a culture.”
Yea, sure. We get it. — Some say DevOps isn’t a real job and that your Dev team and Ops team should work hand in hand. Whatever you want to say or believe, who really cares. There are people getting paid and their title is DevOps, so it is what it is. If your company can afford a DevOps engineer, great. If not, start incorprating these philosophies with your current teams.
With that said, this is really for anyone who is in IT and wants to get more involved in software development, web development, or anything more on the production side of things.
Anyways, now with that out of the way… below are the key skills and technologies I focused on to put me on the path to software development from IT.
DevOps Tools and Skills
Operating System: Linux
If you want to get into DevOps, start getting used to Linux. Even if you aren’t in DevOps you should still be using Linux since it powers over 90% of computers and systems around the world.
This is pretty easy if you use a Mac as your daily driver. Since Macs are Unix based, many if not most Linux commands can be used on Macs. This is great for when you’re doing Mac administration and you want to script and automate tasks you do daily, or SSH into servers and machines to perform support. More on this topic later.
Web Stack: LAMP
While not always applicable to every DevOps role, learning the LAMP stack helped me understand basic fundamentals of web applications from the operating system level, web server, database, and back-end languages. We all use apps on a daily basis, but knowing how these main components of web applications work together helped me process what exactly is happening, when, and why.
There are other stacks out there, such as LEMP (Linux, NGINX, MySQL, PHP/Python) and MEAN, but I just went with LAMP because it’s one of the most popular and I was already familiar with it. The bottom line is, learn how different portions of web applications work.
Back-End Language: Python
Whenever someone decides they want to get involved in web or software development, they almost always spend way too much time deciding which language they should focus on. While learning specific languages definitely has it’s benefits for particular roles, when you are just starting out and want to learn how to develop applications or software, just picking any language and sticking with it is the most important part.
With that being said, I personally think sysadmins and future DevOps engineers should really stick to Python. It’s probably one of the easier languages to learn and use, it’s human friendly, and you’ll find many security tools and frameworks which are written in Python. In reality it doesn’t matter though. In my first year of DevOps, I’ve already worked with Ruby, Python, of course Shell, and even some PHP. Just pick something and stick with it.
Scripting : Bash
While Python is great, as a Mac sysadmin, one thing I took advantage of was Macs being Unix based and having a terminal. As a Mac sysadmin, I wrote scripts to help configure systems and automate tasks I found repetitive (and also I was lazy and didn’t want to do the same thing over and over.)
For instance, I wrote scripts that would create users, install apps, and configure printer settings when on boarding new users. Normally this task would take several hours, but who has time for that? With a bash script, I could configure 5 or even 10 machines at once through a tool like Apple Remote Desktop, cutting my onboarding time down to minutes, not hours.
Automation: Ansible
Ansible is an open-source IT automation engine, which can remove drudgery from your work life, and will also dramatically improve the scalability, consistency, and reliability of your IT environment. You’re going to want to learn Ansible for provisioning, configuration management, and application testing and deployment.
Once I got to scripting things like user onboarding and application installations, I started combining my scripts with tools like ARD (Apple Remote Desktop) and AutoDMGto automate the imaging of machines. When I discovered Ansible, that combined more of my tasks into one single playbook that I could execute. Playbooks are like recipes (think Chef or Puppet) which end points are then configured by.
Here’s a github repo with some good Mac sysadmin playbooks.
VirtualBox: Vagrant
Vagrant is a tool for building and managing virtual machine environments in a single workflow. Vagrant provides easy to configure, reproducible, and portable work environments.
Need an Ubuntu 18.04 instance for testing? How about a CentOS instance for a staging server? Vagrant gives you a disposable environment and consistent workflow for developing and testing infrastructure management scripts.
Find out more about Vagrant here.
CI/CD: Jenkins
Continuous Integration and Continuous Deployment is one of the most important parts of DevOps, yet is also one of the most complex to grasp and understand. Jenkins may not be the best tool for CI/CD, but it certainly is one of the most popular and definitely an industry staple, especially being open source.
As an automation tool, Jenkins is used to build, test, and kick of deployments of apps, making it easier for developers to integrate changes and bug fixes to software continuosly, eliminating the dreaded “push to production and pray” mantra.
If you are at all serious about DevOps, get to know Jenkins inside and out, as you will be staring at it a lot.
Find out more about Jenkins here.
Cloud: AWS
When it comes to cloud infrastructure and services, AWS is king. Amazon Web Services helps companies reduce costs, cuts deployment times, and increase operational scale by not needing to worry about server provisioning and physical asset limits. AWS is a must if you are trying to break into DevOps or software development (Azure and Google Cloud both exist but pale in comparison to the marketshare of AWS.)
AWS offers hundreds of services but it’s important to get to know the core services such as EC2, S3, RDS, Route53, and Lambda.
A good resource for AWS and DevOps projects is right on the AWS website. You can find that here.
Conclusion & Resources
The best way to really understand the ins and outs of software development and DevOps is to start your own projects. You can watch YouTube tutorials all day and read Medium posts all night, but until you actually start writing some code, configuring servers, and pushing deployments, what you learn won’t stick with you.
If you’re looking for some project and tutorial ideas, AWS has a great resource right on their site here.
Some projects I worked on at home that helped my learning:
- Start with a fresh Ubuntu install and configure a LAMP stack and deploy your own website.
- Install and build a Jenkins server and practice pushing code for deployment.
- Create a free AWS account and start messing around with EC2s, S3 buckets, and other AWS services. Learn how they all integrate and operate.
- Start building scripts to automate some of your everyday task. Build scripts that organize files on your desktop by file extension, or build a script that moves files from one location to another automatically.
I spent 5 years in IT and I learned a lot, but if I had known what I just went over, I could’ve cut my software development journey in half and reduced the time to learn tremendously.
Good luck and keep coding!