DevOps is an approach, methodology and even culture and philosophy of the development process where programmers, testers and system administrators can work on a product faster and more efficiently. This approach helps to reduce errors when transferring a project from developers to testers and sysadmins and to establish interaction between them. It is based on the idea that the development, testing and operation of digital products is a single, seamless and cyclic process.
The topic of devops services itself is quite extensive. It is an automation of infrastructure preparation processes for both development and testing of an application as well as for its operation. It also includes deploying automation and monitoring. The most vivid DevOps is revealed when developing an application using microservice architecture. Let’s consider the example of custom web application development, what problems developers face and how to eliminate them with DevOps approach.
Problems when working without DevOps
The software product goes through several stages to get to the users. The developer writes the code, it is tested by QA, after which the system administrator floods the application on the combat server. A lot of actions during the transfer for testing. The developer installs on his machine all the necessary things: the programming language in which the development will be conducted, such as PHP 7.0, the database, MySQL 5.7 and web server, Apache. What operating system and which versions of libraries and dependencies will be installed on the server is unknown.
Once the desired application functionality has been implemented, it needs to be tested. The programmer packages his code, a copy of the database, information about the required software and installation instructions for all necessary for starting and running the application. After that, he passes the archive to the tester. The QA-specialist installs everything necessary on the test stand, unfolds the application and accepts the test.
If a new development version appears during testing, the procedure has to be repeated. The developer needs to create the archive again, pass it to the tester, and in turn, deploy the application again. As a result of such repetitive procedures, errors are spoiled and QA-specialists have to double-check the same bugs.
Version incompatibility in the test environment and on the customer’s server
After the manual testing was successful and it was decided to move the application to the combat server, the system administrator prepares a new or an existing server. The programmer floods the application there, and then the problems begin. The version of the programming language may differ from the one on which the development was conducted. There may be differences in the version of the database. And even the database management system itself may be different. And this is not to mention the fact that the paths to the files and directories in the code of the application itself are different, because the application on the combat server is in a completely different place than the developer’s machine. As a result, when using another web-server on the production, you have to reconfigure the application. And this is the extra time.
Toolkit for DevOps
The variety of DevOps tools is incredible, so I will list just a few of them that I use in my work.
- Server configuration management: Ansible, Chef, Puppet.
- For continuous integration and delivery (CI/CD): GitLab, Jenkins, TeamCity, Drone.
- Data collection for monitoring: Prometheus, Telegraf, LogStash.
- To display the collected data: Grafana, Kibana, Zabbix.
- Error monitoring: Sentry, Rollbar.