Start applying the best DevOps tools today!
The DevOps revolution has finally taken over the world and DevOps tools have become incredibly popular. According to Google Trends , the number of requests for "DevOps tools" is constantly growing, and this trend continues.
DevOps methodology covers the entire software development lifecycle, so specialists can choose from a variety of tools. But, as you know, no single tool can become a universal tool for everyone. However, some solutions offer such a wide range of features that they can handle almost any task.
Let's break down DevOps tools into categories and compare them with analogues:
- development and build tools
- test automation tools
- tools for organizing deployment
- Runtime tools
- collaboration tools.
Successful and intelligent DevOps implementation includes tools from all five groups listed above. Analyze the current set of tools in your project so as not to miss an important element of the CI / CD pipeline.
Development and Build Tools
This is the core of the CI / CD pipeline stack. It all starts right here! The best tools in this category can manage multiple streams of events and easily integrate with other products.
At this stage of the development life cycle, there are three groups of tools:
- version control system (SCM)
- continuous integration (CI)
- data management
In 2020, GIT has only proven itself on the positive side, so your SCM tool should have flawless GIT support. For CI, a prerequisite is the ability to execute and run assemblies in an isolated container environment. With regard to data management, it requires the ability to make changes to the database schema and maintain the database in accordance with the version of the application.
SCM + CI Tool # 1
Winner: GitLab and GitLab-CI
The best tool in the 2020 DevOps cycle is without a doubt GitLab, and it will definitely remain an innovation leader in the near future.
The main function of GitLab is to provide comfortable management of the Git repository. The web interface is intuitive and easy to use. GitLab provides everything you need in a free version and comes in both SaaS and on-prem (using your own resources to host software).
No other SCM tool has used continuous integration (CI) directly in your repository, and GitLab has been doing it for a long time. To use GitLab-CI, you must add the .gitlab-ci.yml file to the root of your source code, and any changes to the project will trigger actions based on what you specify. GitLab and GitLab-CI are deservedly recognized as leaders in the field of continuous integration (CI-as-code).
Key benefits
- Reliability - The product has been on the market since 2013; stable; well maintained.
- Open Source - The free version of GitLab does not limit the core functionality that development teams need. Paid service packages provide additional useful features for companies of different sizes and needs.
- Engrained CI - No other tool on the market has built continuous integration directly into SCM like GitLab-CI. Using Docker provides a hassle-free, sandboxed build, and built-in reports make it easy to debug (debug). We don't need complex integration and management of several tools at the same time.
- Unlimited integrations - GitLab provides easy integration of all the DevOps tools you need. This allows development and maintenance teams to use a single source of information about their application in any environment.
Competitors
Fought, but didn't win
There are other popular tools in this category, but they're not as good as GitLab. Here's why:
GitHubβIt's a great SaaS version control system for small businesses and early stages of development. For large companies that need to keep IP addresses on their own network, the only solution on GitHub is the .OVA virtual machine without HA support. This makes it difficult to maintain on-prem, besides, .OVA is only suitable for medium-sized businesses, otherwise the server will simply crash under heavy load. The lack of GitHub Actions (until recently and not yet on-prem) or CI-as-code means that you have to select a separate CI tool and then manage this integration. Finally, GitHub is much more expensive than any of the GitLab versions.
Jenkins- While Jenkins is considered the standard among continuous integration tools by default, it has always lacked version control capabilities. It turns out that you are using Jenkins plus some kind of SCM tool. It's too difficult when GitLab can do both. Mediocre UX design isn't good for a modern web app and leaves a lot to be desired.
BitBucket / Bamboo - I have to admit it is an automatic loser: why two tools when GitLab does everything completely on its own. BitBucket Cloud supports the GitLab-CI / GitHub Action functionality, but no company larger than a startup can easily implement it. The on-prem BitBucket server doesn't even support BitBucket pipelines!
Data Management Tool # 1
Winner: FlywayDB
In the development of web applications, database automation is usually overlooked. The idea to deploy changes to the database schema for new versions of the application comes with a delay. Schema changes often result in the addition and renaming of columns or tables. If the version of the application does not match the version of the schema, the application may crash. Also, organizing database changes when updating an application can be challenging as there are two different systems. FlyWayDB solves all these problems.
Key benefits
- Database versioning - Flyway allows you to create database versions, track database migrations, easily migrate or rollback schema changes without any additional tool for this.
- β : Flyway . Flyway , . cmd line ad-hoc, .
Competitors
Participated in the battle, but did not win.
There are not many tools in this area. Let's take a look at some of them:
LiquiBase - Liquibase resembles FlywayDB. I would like to set it up on top of Flyway if there was a specialist in my team with more experience with Liquibase.
Flocker - May only work for containerized applications. Everything must be perfectly planned for the successful launch of databases in containers. I recommend using RDS (Relational Database Service) for databases and do not recommend storing sensitive information in a container.
Test automation tools
Let's start our discussion of test automation tools by classifying them based on the testing pyramid.
The testing pyramid (tests) has 4 levels:
- - β . - . -, , ( «») .
- β β / . , .
- β , .
- β . , , .
Since unit tests and component testing are done only by developers and are often language dependent, we will not be evaluating these tools for DevOps.
# 1 Integration Testing Tool
Winner: Cucumber
Cucumber combines specs and test documentation into a single living document. The specs are always up to date as they are automatically tested by Cucumber. If you want to build an automated testing framework from scratch and simulate user behavior in a web application, then Selenium WebDriver with Java and Cucumber BDD is a great way to learn and implement Cucumber in a project.
Key benefits
- BDD- (Behavior Driven Development β β β β β) β Cucumber BDD-, .
- β β ! , Cucumber , , .
- β , Cucumber , .
Competitors
Participated in the battle, but did not win
Among other frameworks and technology-specific tools, only Cucumber can be considered a universal solution.
End-to-end testing tools
When conducting end-to-end testing, there are two key points to focus on:
- functional testing
- Stress Testing.
In functional testing, we check if whatever we want is actually happening. For example, when I click on certain elements of my SPA (Single Page Application), fill out the forms and select "Submit", the data appears in the DB and the message "Success!"
It is also important for us to verify that a certain number of users working in the same scenario can be handled without errors.
The absence of these 2 types of testing will be a significant drawback in your CI / CD pipeline.
End-to-end testing tool # 1. Functional testing
Winner: SoapUI Pro
SoapUI has been in the area of ββAPI testing for a long time since SOAP-based web services were the standard. Although we are no longer creating new SOAP services, and the name of the tool has not changed, this does not mean that it has not evolved. SoapUI provides an excellent framework for building automated functional backend tests. Tests can be easily combined with continuous integration tools and used as part of the CI / CD pipeline.
Key benefits
- Detailed documentation - SoapUI has been on the market for a long time, so many online resources have been created to help you understand how to set up tests.
- Ease of Use - Although the tool supports multiple protocols for testing APIs, SoapUI has a common interface for multiple services, making it easier to write tests.
Competitors
Fought but didn't beat
Selenium - another great tool in this group. I recommend using it if you are building and running a Java based application. However, if you are building a complete web application with multiple technologies, it can become unwieldy for non-Java components.
End-to-End Testing Tool # 1. Stress Testing
Winner: LoadRunner
Explanation: When it comes time to load test each element of the application, only LoadRunner can perform this task. Yes, it's a bit expensive and difficult at first, but LoadRunner is the only tool that gives me, as a technical architect, complete confidence that the new code will work under extreme stress. Also, I think it's time to put LoadRunner in charge of the development team, not the testing team.
Key benefits
- Extensive Documentation - LoadRunner has been on the market for a long time, so many online resources have been created to help you understand how to set up load tests.
- Protocol Support - Load Runner supports from ODBC to AJAX, HTTPS, and any other non-trivial protocol your application can use. We try not to use multiple tools for load testing, as this only complicates the process.
Competitors
Participated in the Scramble, But Didn't Win
Again, there are not many universal tools in this area, so the best solution is one that will work in any environment with any technology.
Deployment tools
Deployment tools are probably the least understood aspect of development. It is difficult for an operation team to use such tools without deep understanding of the application code and functionality. For developers, managing deployment is a new responsibility, so they don't have enough experience with such tools yet.
First of all, let's divide all the deployment tools into three subcategories:
- artifact management
- configuration management
- deploy.
Artifact Management Tool # 1
Winner: Nexus
The Nexus Artifact Repository supports almost every major technology, from Java to NPM to Docker. We can use this tool to store all used artifacts. Proxying remote package managers also dramatically speeds up the CI build process by making packages more available to build. Another advantage is the ability to get a complete picture of all packages used in several software projects by blocking unsafe open source packages (they can act as an attack vector).
Key benefits
- Technical support - Reliable product; well maintained.
- Open Source - The free version does not limit the core functionality that development teams need.
Configuration Management Tool # 1
Winner: Ansible
Ansible is the leader for one simple reason: stateless. Previously, such tools focused on managing configuration state. When launched, such a tool, having received the desired configuration, will try to correct the current configuration of the application. And with the new approach, only stateless components are present. New versions of the code are artifacts that are deployed to replace existing ones. This can be considered a kind of ephemeral, short-term environment.
Key benefits
- Stateless - Playbook is launched from the deployment machine and executed on target servers. I'm not worried about the state of the remote object by using a tool like Packer to create deployable objects.
- β CentOS, Ansible RedHat. , .
- Molecule ( Ansible) β β , , . Molecule Ansible , , CI/CD-, .
- YAML β , YAML . , , , DevOps-, β .
Competitors Fought
but didn't beat
OpsCode Chef - I started my DevOps career as a cookbook developer. Ruby and Chef are, of course, very dear to my heart, but they simply do not solve the problems of modern stateless, cloud-based applications. OpsCode Chef is a great tool for more traditional applications, and in this article we are focusing on the future.
Puppet - Puppet has never had many fans, especially when compared to Chef and Ansible. It is great for provisioning and working with hardware, but it lacks modern configuration management support for a web application.
Deploy tool # 1
Winner: Terraform
Terraform solves the problem of describing your infrastructure as code: from network components to full server images. This product has come a long way since its first release, with a huge number of plugins and such a strong community that it will definitely help you with any deployment scenario. The ability to support any type of environment (on-premises, in the cloud, or elsewhere) is unmatched. Finally, the latest version provides most of the same logic functions and classes in the HCL as any other traditional programming language β developers are quick to grasp and can master Terraform with ease.
Key benefits
- Environment Independent - Terraform uses functions that serve as the interface between your Terraform code, all APIs, and internal logic to communicate with the infrastructure provider. This means that I will learn just one tool and then I can work anywhere.
- Open Source - Hard to beat free tools! Community support at the highest level.
Competitors
Participated in the scrum, but did not beat
AWS CloudFormation - Even if you only work in the AWS cloud environment, your next job may have a different tool. Dedicating all your time and energy to just one platform is a short-sighted decision. In addition, many new AWS services are often available as Terraform modules before they become available in CloudFormation.
Runtime tools
The ultimate goal of any development project is to launch the application into production. In the DevOps world, we want to be fully informed about all possible problems with our environment, and we also want to minimize manual intervention. Choosing the right set of Runtime tools is critical to achieving nirvana when developing your application.
Subcategories of Runtime Tools:
- X-as-a-service (XaaS)
- orchestration
- monitoring
- logging.
X-as-a-Service # 1 Tool
Winner: Amazon Web Services
Amazon has always been a leader in cloud computing, but it doesn't stop there: the variety of new services for developers dazzles. Transfer any technology and template to AWS and it will be built and launched. The cost of the tool is quite reasonable: compare it with assembling, managing and maintaining equipment in your own data center. The free version allows you to experiment and make the right decision before spending money.
Key benefits
- Prevalence - If you have experience building applications on AWS, you can work anywhere. Businesses love AWS, and startups also appreciate its low cost.
- β , AWS . , , , - . .
Competitors
Fought, but didn't beat
Azure - Azure has come a long way since its first release, and that's commendable. Nevertheless, the desire to be different from peers has led to strange names for services, which often complicates the work. What does blob storage mean? And while .NET code performs better in the Microsoft ecosystem, it is unlikely that you will only use .NET for every component of your application.
Heroku - I would never run anything other than a personal project on Heroku due to the low level of reliability and transparency, so companies should not use it as a platform. Heroku is great for demonstrating something on a blog, but for practical use - βNo thanks!β.
Orchestration Instrument No. 1
Winner: OpenShift
You are probably using Docker or other containers in your application stack. Serverless applications are great, but they may not fit every architecture. Running containers without an orchestration framework just won't work. The Kubernetes core (K8s) is unrivaled in terms of security and instrumentation. OpenShift is the only Kubernetes-based platform that can build Source2Image, automate pod deployments, and track and monitor. OpenShift can be run on-prem, in the cloud or on-prem and in the cloud at the same time.
Key benefits
- β K8s . ! , OpenShift, .
- Β« Β» β K8s, , OpenShift . , CI/CD, , . - , , API, , . K8s, OpenShift Kubernetes. !
Competitors Fought,
but didn't beat
Docker Swarm - Docker Swarm tried to simplify K8s by getting rid of a lot of things. It works great for small applications, but it just doesn't work for enterprise applications. In addition, solutions like AWS ECS take a similar approach but make it easier to work with other services that I can also interact with (Lambda, IAM, etc.).
Monitoring tool # 1
Winner: New Relic
Early releases of New Relic did one thing well - Application Performance Monitoring (APM). It is now a fully featured monitoring tool to monitor server, container, database performance, end user experience monitoring, and of course application performance monitoring.
Key benefits
- Ease of Use - When I was a systems engineer, I used a lot of monitoring tools, but never came across something as simple and easy to use as New Relic. It is SaaS, so you don't need to install it on your own.
- β . , , , . New Relic , .
Competitors
Participated in the battle, but did not win
Zabbix - My first and favorite monitoring system, but it has remained in the past due to the lack of development in cloud technologies and in the field of monitoring the performance of APM applications. Zabbix still performs well with traditional server infrastructure monitoring, but that's about it.
DataDog - Too much focused on the process of managing the production environment of the application, and not on the code itself. With DevOps teams that involve developers, we don't have to rely on complex tools to provide top-notch support.
Logging tool # 1
Winner: Splunk
Splunk is hard to compete! For a long time he remains the leader in logging, continuing to do it best. With on-prem and SaaS offerings, you can use Splunk anywhere. The major drawback is its price: Splunk is still pretty darn expensive!
Key benefits
- Prevalence - Businesses love Splunk and companies have the money to buy it.
- Although startups are trying to recoup the costs, many features can be solved thanks to their open source counterparts.
- Maintainability - Simply put, Splunk works and does it well. It comes with many defaults and features ready to use. No need to waste time reading the documentation and trying to get Splunk to work or decrypt anything.
Competitors Fought
but didn't beat
ELK Stack (ElasticSearch, LogStash, and Kibana) - These tools seem like favorites since you don't even have to sell liver for using them. However, with the growth of the set of logs and the increase in the number of applications on board, the work becomes more difficult. Compared to Splunk, with ELK Stack, I spent a lot more time setting up the toolkit before creating any dashboards than ever before.
Collaboration tools
DevOps is primarily about culture change within an organization. Buying any tool will not change habitual practices overnight, but it can certainly foster collaboration and new ways of interacting.
Collaboration Tools Subcategories:
- task tracking
- ChatOps
- documentation.
Issue Tracker # 1
Winner: Jira
Jira maintains a leading position, although competition in this area is increasing. Jira's incredible flexibility allows development and maintenance teams to manage project work and sprint tasks. Built-in standards using Agile terminology make it easy to move from traditional ways of working to more efficient processes.
Key benefits
- Popularity - Like many other tools, Jira is used almost everywhere. Small teams use a cheaper, more affordable version and get everything they need, while large companies can afford a higher license.
- β Jira β . , Jira , , . Jira , , .
Competitors
Got to Kick But Don't
Beat Trello - Trello quickly gained popularity thanks to its free Kanban tool. However, once the processes scale and you move from dozens of tasks to thousands, Trello is difficult to navigate, search, and report.
Pivotal Tracker - I was a huge fan of this tool when I was working for a startup. However, Pivotal Tracker is more focused on product management rather than technical tasks. Although managing a product in Jira is a bit more complex, it can still be implemented there without using an additional tool.
ChatOps tool # 1
Winner: MatterMost
Explanation: Perhaps the biggest surprise for you in my collection, and this is great news! MatterMost gained popularity by taking the best from previous instruments, but included them on-prem. This is very important for companies: MatterMost allows you to control the data, and also helps to integrate it with tools that work on-premises. We no longer need to go outside the firewall to check work chats.
Key benefits
- Open Source - The open source version of MatterMost works great for both medium and large teams. Unlike the free Slack plan, which deletes your message history, running your own server means you save all your data.
- Integrations - Since the API is almost 100% based on the Slack API, almost all Slack integrations can be used directly with MatterMost.
Competitors
Participated in the battle, but did not beat
Slack - Slack is cool, but these guys have grown so much that they started looking for profit. The stage of business payback is approaching, which takes away their main value: Slack provided services for free; the most important drawback of the free version is deleting the chat history.
Microsoft Teams - Try integrating a Microsoft product with something not Microsoft ... Good luck! That's all I want to say about this tool!
Documentation Tool # 1
Winner: Confluence
Creating and maintaining quality technical documentation is a complex process regardless of the tool you use. Although there have been many SaaS documentation tools on the market lately, it would be difficult for me to outsource the storage of technical documentation for critical applications to third parties. Storing data and documents is preferable to on-prem, and here's how Confluence solves it.
Key benefits
- Ease of Operation - Most stand-alone tools can be a little difficult to set up and operate and require some knowledge to maintain. Confluence Server works great out of the box for 10 or 10,000 users.
- Plugins - Thanks to Confluence for having nice and easy navigation out of the box, and being able to add a plugin for just about anything opens up the potential as a Wiki.
Competitors
Fought, but didn't win
Read the docs - Cool for open source, but don't even think about storing critical knowledge here.
MarkDown - Great for documenting code, but it's hard to host architecture, processes, or other kinds of documentation here due to MarkDown's specific formatting.
Jekyll - When documenting technical knowledge, I don't want to create a new static site that will unfold on every change. Confluence's simple version control system greatly simplifies internal documentation.
Let's sum up
There are literally hundreds of DevOps tools on the market, making it difficult to know which ones should be used and when they should be implemented. Follow this easy guide to choosing DevOps tools for a complete CI / CD pipeline.
Don't forget to choose tools from all five categories:
- development and build tools
- test automation tools
- deployment tools
- Runtime tools
- collaboration tools.
Top recommendation: Automate everything!
Thanks to Zach Shapiro!