DevOps is currently the most popular methodology for developing enterprise scale software systems. It is essentially an agile methodology that emphasizes communication, collaboration and integration between software developers and personnel involved in operations such as IT administration. DevOps was motivated by the need to address the implications of the well-known interdependence between software development and IT operations. DevOps is already helping organizations to rapidly produce software products and services.
Automation in developing, testing and deployment tasks is at the heart of DevOps. Organizations employing DevOps deploy software up to as much as thirty times more frequently than other enterprises, while having much shorter lead times. Hence, all organizations that employ DevOps make use of a rich set of tools that automate DevOps activities across the entire lifecycle of DevOps processes, including planning, coding, builds, testing, deployment, operations, as well as monitoring and control. These tools enable organizations to implement lean management and continuous delivery practices across the entire DevOps lifecycle. As a result, it’s important that DevOps developers understand, learn and leverage the ecosystem of DevOps tools.
Planning and Coding Tools for DevOps
DevOps planning and coding tools facilitate developers in organizing their development tasks, as well as in structuring their code in proper repositories that are accessible by other members of the DevOps teams. Prominent examples of such DevOps tools, include:
- Git, which provides the means for tracking changes in source code. It’s a fully distributed systems that keeps track of different software versions. As such it is also used for coordinating the activities of a team of developers. Git’s popularity stems from the fact that it is fast, while ensuring data integrity and supporting distributed, non-linear workflows of the software development team.
- Jira, is widely used for tracking issues in software projects and software product development It allows tracking of bugs, assignment of tasks to developers, end-to-end tracking of the status of tasks and use cases. As such it is an excellent tool for agile project management in the scope of a DevOps project.
- Subversion, is an open source software versioning system offered with an Apache license. It provides revision control functionalities and enables developers and other DevOps stakeholders to maintain and track versions of source code files, web pages and documentation (e.g., readme files, swagger APIs, Javadoc documentation).
DevOps automates the build process as a means of incorporating and deploying changes to the software codebase. Revised versions of the code can be built with just one click, which boosts agility in software development and deployment. Prominent build tools in the DevOps ecosystem include:
- Maven, which is a build automation tool that is very popular among Java software developers. It provides the means for creating and configuring build plans, including the dependencies between the different modules of a software project. Prior to Maven, the Java community was extensively using the Ant build automation tool.
- Gradle, is an another open-source build automation platform that leverages concepts introduced in Ant and Maven. It is based on its own Groovy-based language for describing project configurations and dependencies between different modules. This differentiates it from Maven that uses an XML-based configuration language.
Continuous and automated testing is at the heart of the DevOps methodology. In most cases, modern DevOps projects involve Test-Driven-Development (TDD), a discipline where tests are written prior to the code of a given use case. Testing activities are supported by tools like:
- Junit, which is a unit testing framework for Java programming. JUnit has played an important role in TDD, as it was used in the first TDD developments.
- Selenium, which is a portable framework for testing web applications. It enables playback functionalities towards creating functional tests. Selenium users can write tests without using a test scripting language.
Deployment and Operations Tools
There is no DevOps without automated deployment of software based on proper software configurations over the available IT infrastructure. Thus, there are various tools that manage deployment configurations, while at the same time automating their deployment. In particular:
- Chef, is a tool for configuring software deployments. The latter are represented in Chef’s specialized domain specific language. Chef itself is written in Ruby and Erlang.
- Ansible, which is open-source tool that enables software provisioning, configuration management, and software application deployment over a DevOps infrastructure. It supports configuration of both Unix and Microsoft Windows systems.
- Jenkins, which is one of the most prominent continuous integration servers written in Java. Jenkins automates the part of checking in new software and automatically identifying its impact on the overall project/product. The server triggers the execution of all tests whenever new code is checked-in in the code repository. In this way, it supports continuous integration and facilitates continuous delivery of tested software based on the latest available features. Jenkins runs in Java Servlets containers such as Apache Tomcat.
Beyond Jenkins, there are also other continuous integration servers, such as Bamboo, which offer similar features and are also attracting the attention of the DevOps community. Another example of Continuous Integration (CI) server is Drone, which is probably the newest CI server in the market and is built around the concept of containers. This makes it easy to combine it with containers’ infrastructures like Docker. For this reason, Drone features a higher degree of modularity when compared to other CI servers, which makes the development and deployment of CI related plug-ins faster.
Monitoring and Management Tools
DevOps teams benefit from monitoring and management teams that provide them with insights about the status and operation of their infrastructure. Tools that help DevOps teams in this direction include:
- Nagios, which is open source and used to monitor DevOps infrastructure elements, including systems, switches, routers and other networking elements. It offers a range of monitoring and alerting services for all these infrastructure elements.
- New Relic, a tool that provides software analytics for application performance monitoring. It offers real-time performance information, along with trends associated with the operation of web applications.
In order to rise the wave of DevOps development, you certainly need to acquaint yourself with a range of tools that support the entire lifecycle of DevOps activities. In this post we have presented some of them in order to help you understand the structure of the DevOps tooling ecosystem and accordingly to start your tooling understanding endeavors on the right foot.