You can find a lot of definitions for the “DevOps” term and most of them will be accurate because every IT company tries to implement the meaning in its own unique way. But according to Google’s 2019 Report, one can be affirmed out without any doubt – DevOps become a part of major companies all over the world.
First of all, DevOps is not just about processes. It’s about the culture inside our organization and the way we transform the ideas of our partners in real products. Generally, DevOps is a combination of principles, tools and best practices that helps us to deliver high quality and easily maintainable code into production as fast as possible.
Why DevOps is so important for the business?
Usually, DevOps practices are implemented inside small teams but we go further and work hard on making DevOps a part of our company culture. That’s why we firstly test and imply all DevOps approaches to our internal services and workflows. It helps us provide our clients with verified and validated solutions.
What does it mean in practice?
Shorter time-to-market of product – it helps to create a working prototype as soon as possible. Then, we improve and add new features with frequent releases and lives to test new ideas.
Improved quality of product – automated tests and fast fails help to eliminate bugs and issues before they show up in the live version. Real-Time collaboration between developers and operations helps to make applications architecture and delivery more effective.
Faster bugs detection and response to security issues. With smaller and more frequent releases, the code updates become live faster. Developers get feedback from users and fix issues rapidly.
Lower time to restore. If there’s some unexpected incident or an error that impacts users happens, the application can be restored to the previous version since all parts of service (application deployment steps and infrastructure) are saved as a code.
Cost reduction and customer satisfaction: all of the previous improvements in general impact the total price of product development and support. Fast response to issues and adding new features according to users’ feedback makes customers more satisfied.
How does it work on real projects?
Planning:Continuous planning and code analysis help to produce effective and unique solutions. Every team member involved in the creation and adoption of product release steps.
Configuration Management:All the infrastructure components, server configurations, and automation scripts are saved in source code control systems. Different project environments such as development, test, staging, and production can be recreated from scratch. They are easily scalable and updated in the same way as application code. And what is more important, it becomes an integral part of the application with the built and deployed pipelines.
For infrastructure provision, we actively use Terraform – powerful, elegant and cloud-agnostic Infrastructure as Code tool. With its declarative configuration files, we can safely and predictably manage the full infrastructure lifecycle. We can create new resources, manage existing ones, finish those no longer needed in production, staging, and development environments. With Terraform we don’t need to be limited by one cloud supplier. It is designed to combine multiple cloud providers consistently, choosing the most suitable services.
Ansible is our сhoice for configuration management tools. It’s a clear leader in IT automation with more than 1300 modules, strong open source community and RedHat Corp support. It does not require agents installed at the endpoints and it is the only automation language that can be used across entire IT teams from systems and network administrators to developers and managers. With reusable configuration files, it helps us eliminate repetitive tasks, increase accountability and compliance through the fully automated environments.
Build, Release and Deployment Automation
While configuration management takes care of the baseline setup required for system components, deployment automation addresses automated processes in getting the application software releases and patches installed on various types of compute nodes regularly. Every change in application code goes through code quality analysis and continuous testing automatic triggering of both manual and automated test cases. Code changes are delivered to the required environment only after the successful completion of all predefined check-ins.
We have experience with different CI/CD tools such as Travis, CircleCI, AWS CodePipeline, TeamCity, etc. For now, Jenkins is considered our main CI/CD tool. With a strong community, emailing number of plugins and the ability to define pipeline as a code, it can be suitable for almost any programming language or framework. It has great integration with SonarCube – the most popular code inspection tool, that helps to detect bugs and vulnerabilities before they are marked in source application code. Combined with Docker, it becomes a universal test platform with the ability to reproduce any complex environments. In interaction with the infrastructure, it can deliver new features to any environment in an automatic way rapidly. Altogether, this significantly speeds up software development and reduces its cost.
The last but not the least thing that the customers need is to be notified about production issues. The unstable web application can lose credibility if the features don’t work as intended. Even though highly reliable monitoring systems are available, it is impossible to catch all of the issues using out-of-the-box features of such products.
In practice, we don’t rely on a single monitoring solution. We try to use all obtainable native features of cloud services combined with self-hosted monitoring solutions and services. We focus on Prometheus (as a very elastic, lightweight and scalable self-hosted solution) and Datadog (universal, powerful and easy-to-start service solution).
Extending the features based on knowledge of application performance and fixing issues before customers or users find them is a key for modern continuous application development. This gives the entire team a broad understanding of how the application works on both client and server sides and helps to develop fast, stable and rational scalable applications.