We have talked a lot about DevOps and the latest trend in the DevOps world previously. But what do DevOps engineers really do?
In its purest form, a DevOps engineer bridges gap between software development and operations teams to increase the rate of software delivery.
Traditionally what happens is that software developers write codes for weeks and months and hands over the code to QA team for testing which then hands over the final release to operations team for deployment. There is lack of collaboration between all these three phases i.e. development, testing, and Deployment.
Developers write the code and hands over to the deployment team. Now it’s up to deployment team to fix the problems that arise during deployment of code or hands over the code altogether back to the development team to fix the bugs. All this results in a slowing of software development process.
But under the umbrella of DevOps model, these three teams are no longer isolated from each other. Most of the times these three teams are merged into a single team where the engineers work across the entire application lifecycle, from development and test to deployment to operations, and develop a range of skills not limited to a single function. Security teams may also become more tightly integrated with development and operations and throughout the application lifecycle.
DevOps engineer is not a new thing. It’s a set of engineers like system engineer, build automation engineer, software engineer, Linux engineer and so on.
However, DevOps engineer nature of work varies from organization to organization. In some cases, its role is automation of infrastructure and maintaining it. While some organizations span their role to the entire delivery chain.
Role of DevOps engineer varies as he has to collaborate with development and deployment personals by overcoming traditional collaboration barrier. And different organizations have different barriers.
Even though the role of DevOps engineer varies, there are two things which almost all DevOps engineers will touch on a daily basis – automation and continuous integration.
Most of the tasks related to maintenance of infrastructure are still manual. Companies prefer to use traditional proven methodologies rather than automating the same process, as they don’t want to take any risk. But the fact is automated tasks will help in faster development and deployment of software’s, which means fast cash transfer from the customer account to the company account.
To grasp this point, consider for instance if system engineer has been tasked to backup all servers twice a day manually, he will waste his time in doing this as same could have been easily achieved by writing a script to automatically backup your server at some cloud facility. By automating the backup process, you allow your system engineer to focus more on critical things like troubleshooting the servers who are down due to some VM problem. Doing the same thing manually will result in overburden on your system engineer whose efficiency will drastically be reduced. This is just a very simple example to elaborate the concept of resource wastage by not moving to automation.
DevOps can be taken as an extension of Agile, as it reduces the risks that may arise due to non-collaboration between developers, QA and the deployment team. DevOps expand the scope of Agile principles, by recognizing the fact that high-quality software development requires continual engagement and feedback of all stakeholders including QA and operations specialists.
There are many things which can be done in an automated manner like updating your Apache Web server with new patches as and when they are released, updating versions of open sources software’s deployed on your servers.
DevOps Engineers can automate the process of configuring servers by creating scripting environment. You can run scripts on one node, but it will become impractical to run the same script on hundreds of nodes if not thousands. Scripting is not a scalable solution here.
So there is a need to automate software provisioning, configuration management, and application deployment across a large number of nodes in a scalable fashion. This is where the configuration management tools such as Chef, Puppet, and Ansible come into handy in the DevOps world.
Another important aspect about DevOps is Continuous Integration (CI) which is a software development practice, CI allows developers to continuously update changes to a single repository, from where automated builds and tests are made.
A continuous Integration system usually involves a tool that keeps monitoring your version control system. Whenever a change to version control system is detected, the system would automatically build and test your application. If the build or test is not green, the system immediately notifies the developers to fix the issue right away.
Continuous integration ensures continuous delivery, as all code changes are continuously deployed to testing and production environment that follows the build stage.
With continuous integration, Developers can improve their productivity as they are freed from manual tasks, that are now done in an automated manner in CI; Errors and bugs are easier to find and mitigate as a result of frequent testing; Updates to end user can be delivered quickly and more frequently.
There are different products and tools which can help you implement Continuous Integration in your organization.
Some tools let you host the CI servers in your own network infrastructure. The most popular one is Jenkins which is rebranded from the Hudson project of Sun.
There are some other hosted CI products such as CircleCI and Travis CI which is completely hosted in the cloud. These hosted CI products are getting more and more popular especially for small organizations as it enables engineering teams to start the continuous integration as fast as possible.
The most critical role that DevOps engineers play is to bridge the gap between software development and operations teams to increase the rate of software delivery.
Even though the role of DevOps engineer varies across organizations, there are two common aspects: automation and continuous integration.