Editor’s note: Andy explores the connection between system administration and DevOps and shares the hard skills required to become a DevOps engineer. If you need experienced DevOps experts to fine-tune and maintain the DevOps process at your company, don’t hesitate to learn more about our managed DevOps services.
DevOps as a concept
It’s not a surprise that most DevOps engineers come from the system administration. For system administrators, such a career maneuver allows improving their professional qualifications without moving directly to the development area. Whether this opportunity excites your curiosity or not, in this article, we’ll explain why it should and will shed light on the way how to become a DevOps engineer.
A while ago, Agile transformed software development processes. Now the time has come for DevOps to influence the IT industry. Large enterprises like Amazon and Facebook were the first to switch to DevOps. Today, the DevOps approach is implemented both in IT and non-IT companies worldwide. It helps IT teams to adapt to modern tendencies, such as IT infrastructure sophistication, the increase of software updates frequency and respond more rapidly to user feedback.
Despite DevOps popularity, there is still no common definition of the term. Typically, DevOps is described as a modern approach to software development where development and operations specialists are united in one big team. To be more specific, the DevOps approach implies that the development, quality assurance (QA), design, analytics, operations, and other specialists are put in one working environment where they constantly collaborate through the entire development-testing-releasing cycle and work using unified tools. All members of the newly created DevOps team share the responsibility for all processes within a software life cycle – from gathering requirements specifications to delivering the application into production and further monitoring its performance and reliability.
Let’s imagine a software development company that is creating an online booking service. In the pre-DevOps times, a development team wrote a new piece of code quarterly to update the existing software functionality. Before getting to production, software passed from developers to software test engineers, and then – to system administrators. In case errors occurred in the application’s functioning at this stage, the development team got the defect tickets to fix bugs in released software. As a rule, they needed to spend too much time to identify “defective” code fragments and put them to rights.
Once the bugs were fixed, software test engineers got the adjusted application to verify the fixes in it. After that, the operations team took up the torch and did their best to put modified software into production avoiding failures and providing software users with a stable application. However, there was always a risk that the adjusted application would behave differently when the operations specialists moved it from the testing environment to production.
Thus, such a software development approach implied a continuous process of transferring an application from one department to another, which resulted in the prolongation of the development-testing-releasing cycle.
To accelerate software development and increase the quality of application releases, the company decided to switch to DevOps. They moved away from a clear division of duties, when developers, test engineers, and system administrators were responsible only for their part of work with just a general idea of the other team members’ responsibilities. The development and operations teams have become involved in the software release process in equal measure.
Due to the shift to DevOps, the working process for the developers and the operations team becomes interdependent and runs more efficiently: the Ops team assists the Dev team in managing and maintaining large-scale information systems (e.g., data warehouses, enterprise planning systems), and the Dev team, in its turn, helps the Ops team to configure the IT infrastructure, as well as implement software updates to improve its security, reliability and performance. Thus, the amount of time needed for the development cycle decreases.
DevOps is not only about establishing a new pattern of relationships across the IT department, it also entails applying new development practices.
- Continuous Integration implies that developers daily put their part of complete code to a master repository in a version control system. When a developer makes changes to code, a shared code repository is updated automatically. Here, all the source code files are compiled together and the build artifacts (such as executable programs) are created. The normal practice is to organize builds regularly, for instance, once or twice a day. In terms of each build, unit testing and automated tests are conducted to check the application performance. If errors occur, developers are immediately notified and can fix them promptly.
- Continuous Delivery comes after continuous integration. Once the application is built, unit tests and application acceptance tests, are conducted automatically, the DevOps team manually delivers software to the client’s servers.
- Continuous Deployment implies that once the changes are applied to software and the updated application undergoes the required automated and manual tests, software is automatically released into production.
DevOps as a profession
When the company’s management decides to shift to DevOps, the need arises to train IT department specialists to master certain practices and use new tools. In this case, either developers or system administrators need to assume new job responsibilities. A better alternative may be hiring a professional with a clear understanding of the DevOps approach and an ability to set all the necessary processes properly. Thus, an IT department needs a specialist with a combination of system administration and programming skills, i.e., a DevOps engineer. According to Indeed, the average salary for a DevOps engineer is 1.5x the salary for a system administrator. The reason is quite simple — a competent DevOps engineer can greatly increase the efficiency of software development and operations.
After getting software requirements specifications, a DevOps engineer starts setting up the IT infrastructure required for the development. When the IT infrastructure is ready and provided to developers, testers, and other specialists involved in the development cycle, a DevOps engineer ensures that the development and testing environments are aligned with the production environment. If you ask the DevOps engineer what exactly they do, the answer will likely mention “automation.” What they actually mean is the following:
- Automating software delivery from the testing environment to the production.
- Managing physical and virtual servers and their configurations.
- Monitoring the IT infrastructure’s state and the application’s behavior.
One of the key duties of a DevOps engineer is to set platforms and tools to implement the continuous integration, delivery, and deployment of code. To automate software deployment on servers, they use such integration tools as Jenkins, TeamCity, GoCD, or Bamboo.
Before the rise of the DevOps concept, system administrators had to set and configure each server manually. Today, due to the implementation of the infrastructure as code (IaC) approach, a DevOps engineer can easily manage the entire IT infrastructure. All scripts for server setting, as well as code written by developers, are stored in version control systems. The operation of servers can be coordinated remotely with such tools as Chef, Puppet, Ansible, or Kubernetes.
Things to know to become a DevOps engineer
To start a career as a DevOps engineer, you’ll need to complete your system administration background with the DevOps-specific skills.
Linux and/or Windows administration
The administration of Linux and/or Windows OS is among the primary skills employers expect from their potential DevOps engineers. To improve your system administration skills, you can enroll in the relevant Linux administration courses, or pass Windows Server Administration training from Microsoft.
A DevOps engineer needs to know programming languages used for configuration automation, for example, Bash, PowerShell, Python, or Ruby. To become more qualified, you can learn one of the general-purpose programming languages, for instance, Go (also known as Golang). You can apply this bundle of knowledge in scripting data processing, creating Kubernetes Operators, AWS Lambdas, etc.
Cloud management skills
Amazon Web Services is among the most popular cloud platforms. A DevOps engineer generally works with such AWS services as AWS OpsWorks, AWS CloudFormation, AWS CodeStar, AWS CodeBuild, AWS CodeCommit, AWS CodePipeline, and AWS Elastic Beanstalk. If you are not familiar with AWS, you can use the opportunity to get one-year free access to a range of the company’s products by registering at their official website. Specialized training can provide you with a better understanding of the platform tools.
Azure DevOps is another well-known and widely used cloud platform. A set of DevOps services Microsoft offers to try for free allows DevOps engineers to monitor software performance and set up automated pipelines to build, test and deploy code easily, thus significantly simplifying software projects management.
Practical experience with containers and orchestration
Containers allow for deploying applications independently from the host OS. Compared to virtual machines (VMs) used in the pre-DevOps times, containers are more lightweight and quicker to launch. Docker represents the most widely known platform that allows working with containers. Developers and DevOps engineers can use Docker containers simultaneously – while a developer writes code, a DevOps engineer creates configuration files. Orchestration tools, such as Kubernetes are used to launch and manage containers. A special online course offered by Linux Foundation can help to get the basic knowledge of Kubernetes.
When you are ready to become a DevOps engineer
DevOps engineers’ responsibilities differ from organization to organization. To know what skills and knowledge your potential employer expects you to have, you may go to several job interviews. After the technical interview, ask for feedback to get a clearer understanding of skills you may lack and technologies you need to embrace.
We’ve already mentioned several DevOps-related technologies in the article. Below is a more comprehensive list of tools most commonly required to get a job in DevOps:
- Version control systems (Git, Team Foundation Server (TFS), Apache Subversion, etc.).
- Continuous integration tools (Jenkins, Travis CI, TeamCity, and others).
- Software deployment automation platforms (Chef, Puppet, Ansible, etc.).
- Systems monitoring tools (Grafana, Zabbix, Prometheus, and the like).
- Cloud infrastructure (AWS, Microsoft Azure, Google Cloud Platform (GCP), Alibaba Cloud, and more).
- Container orchestration tools (such as Kubernetes, Docker Swarm, Apache Mesos, OpenShift, Google Kubernetes Engine (GKE), Azure Kubernetes Service (AKS), AWS EKS).
Starting your career as a junior DevOps engineer usually requires only system administration experience and basic knowledge of appropriate technologies. If you eagerly enrich your background theoretical knowledge with practical skills, your career will develop much faster.
DevOps as a promising area for IT career development
DevOps as a concept will develop further embracing modern development and operations practices. To get acquainted with DevOps and learn how to become a DevOps engineer, start from continuous integration, delivery and deployment practices, as well as the appropriate infrastructure management tools. Then, invest your time and efforts to study such technologies as Jenkins, GoCD, Docker, and others.
The experience of working as a DevOps engineer will allow you to understand better all the processes within the project implementation, therefore, potentially you’ll be able to continue your career as a DevOps manager.
Want to speed up your software delivery cycle and improve software reliability avoiding heavy expenses? Our DevOps consultants will help to implement the DevOps approach.