Journey to Become a DevOps Engineer
If you are looking to get into DevOps, then this article will guide you exactly how you can achieve your goal. And, if you’re just starting out, this article will give you insights on the learning path to become a DevOps Engineer.
There is a general misconception that it is a natural evolution for any System Administrator to become a DevOps Engineer. However, in most cases, it is easier said than done.
There are 3 most common career path that takes you to DevOps
- Absolute beginner ( Freshers )
- System Administrators to DevOps
- Developer to DevOps
General misconception is that anyone from already tech background will have advantage over a beginner, but in reality the journey to become a DevOps remains same more or less for everyone. In fact, sometimes a beginner with lot of interest and eagerness to learn cant beat an experienced person.
Before we go into the career transition to DevOps let’s understand what is DevOps and related concepts around it.
What is DevOps?
DevOps is not a tool but rather a set of principles and philosophies that can be used to achieve the following objectives ( Software Dev pipeline ):
- To reduce organization silos
- Implement gradual and small changes
- Implement tooling and automation
- Accept failures and address them so that the same failure doesn’t happen again
Let’s explore each of them in detail:
Reduce organization silos
Traditionally developers and operations teams have worked in different setup and mindsets. Often the developers have little or no understanding of operations, and operations have little understanding about how the development process is going on, and that created organizations silos, which eventually results in a lot of friction. A classic example could be the developers want to deploy their code as fast as possible into production, whereas the operation team wants to move it in a steady and slow pace to reduce operation or production failures.
The philosophy of DevOps works to integrate these two teams and work in tandem with each other and make developers stakeholder in the operation and operation team make stakeholder in the development process. Having understood each other processes dramatically reduces the organization silos, which results in faster movement of code from development to production environment.
Implement gradual changes — Implement Agile
Agile based software delivery mechanics has brought small and rapid development cycle in the software development process. This approach is different from the waterfall model where you do a one Big Bang upgrade. Having a smaller and incremental change has its own advantages:
- Easy delivery
- Easy rollbacks
- Easy Traceability and audit.
On the flip side, it puts a lot of pressure into the deployment pipeline if it is not automated.
Implement Tooling and automation
As we saw that gradual an incremental change as its benefits, but without a fully automated pipeline, these types of implementations are impossible to manage. So in order to implement aforesaid DevOps principals, we need to do automation. In order to become a DevOps Engineer, you should have the following:
- Build automation
- Test automation
- Deployment automation
- Monitoring and alert
- Failure and roll back automation
Accept that failures are normal
Another key principle of DevOps philosophy is to accept that failures are normal things. When the failure happens, it should be investigated and ensured that the same type of failure doesn’t happen again. This approach could only be possible if the infrastructure resources are taken as a software product that can be fixed by a piece of code and can be version controlled.
What skills are the key
So now coming back to the topic of how to become a DevOps Engineer by transitioning from System Administrator to DevOps, aforesaid philosophies and practices need to be translated into skills and tools.
Let me break down the concepts first, before jumping into core skills/tools[
Concepts that are needed to be learned:
- Understand the development process
- Learn automation to become a DevOps Engineer (learn how to code)
- Understand test concepts and test automation
- Infrastructure deployment automation
In current form, DevOps also have some specialization. Most common specializations are
- DevOps building Software Developer pipeline ( Jenkins, Gitlab, CI/CD )
- DevOps building modern Infrastructure ( Kubernetes, Ansible, Terraform )
In smaller organization there would be single person for both specialization, however, in larger organization you could see people focusing on different areas.
Either way, below fundamental concepts are critical for any successful DevOps Engineer.
Understand the development process
As day to day job of a System Administrator involves applying patches and writing ad-hoc scripts, which leaves them with little or no understanding of the development life cycle or process.
The software development process partly depends on the programming language or the platform used. Primarily there are two types of programming languages.
Compiled Languages and build concepts: Compiled languages are essentially the languages which required to be converted into executable binary before they can be deployed or run into a system.
The development process for such languages is a bit complex if compared to scripting languages like Java or C/C++. General steps involved are:
- Compilation
- Linking
- Packaging
When a developer writes their code in Java they often include multiple libraries which need to be resolved while they are being built. Apache Maven is the most popular build automation tools used in the Java environment. So in order to understand and efficiently build you should understand core Java platforms and how maven does the build operation.
So, to list down the skills needed for build automation would be:
- Understanding the Java platform
- Apache Maven
- Jenkins
- Git for source control
Scripting and interpreted languages: These languages such as PHP, Python, and JavaScript. They do not need to be compiled, they can be simply executed on the machine. Although these languages don’t have any compilation or linking complexity, the environment where they run should already have pre-installed packages. For example, for Python or Ruby, you need to have their dependent libraries or modules pre-installed in the box before they can run.
Learn automation to become a DevOps Engineer
In DevOps philosophy, the approach of automation is the key rather than the automation itself.
The approach to automation should be in such a way that that piece of automation could be executed by anyone. As far as DevOps based automation is concerned, if possible, ad-hoc automation should be avoided.
Ad-hoc automation is often done to solve a very small problem without having a holistic approach for the complete process. For example, if a sysadmin wants to deploy 10 patches to five Linux servers, he or she probably would like to write a small script which can do that quickly.
In the DevOps world, such ad-hoc automation should be done in a more organized way so that this automation:
- Could be run by anyone
- Easily plugged with other modules
- Define input and output interface
- Track changes on the script (git-source control)
There is a saying that you shouldn’t automate the automation
It means if you want to automate you must be ready to code. You can’t automate one thing with another automation. If you are looking for automation with Software dev approach you should check out
- Python for DevOps
- Ruby for DevOps
- Perl for DevOps
The key point I would like to highlight here is that in order to be is successful DevOps automation developer you don’t need to learn a language with its full capability. For example, python is a very diverse and general-purpose programming language. It can be used for web development data science big data or anything, why learning python you should first focus on getting the basic concepts right and then get started with modules which are specific for DevOps automation, it will dramatically reduce the learning curve and help improve your productivity.
You don’t need to be a rock star Python Developer for DevOps Automation
Understand test concepts and test automation
Software testing is a big part of any software delivery cycle. In order to achieve high-quality software, specialized test engineers design and develop test cases which will verify and validate the functionality of the software and catch bugs before they go to production. As with most other job roles, the test automation engineer role is getting more technical and developer driven, which mean the tools which were used traditionally by test automation engineers are not good enough to meet the demand of changing software interface.
Now an increasing number of Test teams are looking for people with development skill who can help and improve text functionality. However, in reality, most Test teams are looking onto DevOps engineers to help them automate their test cases. In such scenarios, the DevOps engineer has to be versatile and have at least basic understanding of testing so that he or she can help the team or code their test cases to deploy them in an automated fashion.
So when it comes to skills again, you should have the following:
- Basic test concepts
- Unit test, integration and user acceptance test
- Understand unit test frameworks such as JUNIT, python Unit test
- Deployment automation of tests using Jenkins
Infrastructure deployment automation our configuration management
This is one of the biggest areas for DevOps engineers where they operate, deploy, manage and administer the infrastructure. As we are moving towards more of multi-cloud and hybrid cloud environment such as management of heterogeneous systems becoming increasingly complex a traditional approach to managing these infrastructures no longer works.
In order to achieve efficient and scalable infrastructure, fully automated configuration management tools must be used with full proficiency. Unlike the case with software development skills, test automation skills when it comes to configuration management skills the DevOps engineer has to be a Rockstar in one of the configuration management tools
- Ansible
- Puppet
- Terraform
When it comes to configuration management skills the DevOps engineer has to be a Rockstar
Linux, Linux and Linux
In modern world, whenever we talk about compute resource we mean Linux VMs, containers etc. Most important of all skills is how comfortable you are with Linux environment and troubleshooting out any issues. I would suggest anyone interested in long term DevOps career, must focus getting hands with Linux, bash and basic Linux troubleshooting skills.
Conclusion
As we know the DevOps field is still evolving and constantly changing. It is almost impossible to list down each and every skill/tool that you must know in order to be successful in this field, however, we can always create a basic blueprint of the core skills. Aforesaid mentioned concepts, philosophy’s and tools may be overwhelming for some and maybe too little for some. In reality, it doesn’t matter where you start or when you start the key here is to be persistent and build these skills slowly and steadily over a period.
To be very honest if you want to take this journey what I just mentioned in the article it will take at least 3 to 6 months to get a basic understanding of the whole system and up to a year to become proficient in one of the key areas.
Having said that I would like to best wish the best of luck to all of you.
If you want to begin your journey with us, please register for our upcoming batch:
https://becloudready.com/journey-to-becoming-a-devops-professional/