Journey to become a DevOps Engineer

becloudready devops

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 better said than done.

Before we go into the career transition from System Administrator 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 ):

  1. To reduce organization silos
  2. Implement gradual and small changes
  3. Implement tooling and automation
  4. Accept failures and address them so that 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 stakeholders in the operation and operation team make stakeholders 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

Add description

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. Broadly we can categorize automation in 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:

  1. Understand the development process
  2. Learn automation to become a DevOps Engineer (learn how to code)
  3. Understand test concepts and test automation
  4. Infrastructure deployment automation

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

It will not be true to say that the System Administrator doesn’t do any kind of automation in their day to day job. 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 that 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 that 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 means 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 skills 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 a 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, to become a DevOps Engineer, you should have the following:

  • Basic test concepts
  • Unit test, integration test karma user acceptance test
  • Carmen unit test frameworks such as jaunt, 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

Conclusion

As we know that DevOps field is still evolving and constantly changing. It is almost impossible to list down each and every skill/tools 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 best of luck to all of you.