DevOps is not just a buzz word today but is a methodology adopted increasingly by the IT industry for software development and infrastructure management. This article talks about the various aspects of DevOps realisation and the open source DevOps tools that are popular in the industry today.
Enterprises today are increasingly making the DevOps paradigm shift and one does not see a huge gap between the development and operation functions like before. When it comes to software development and infrastructure management methodologies, the old ways have been replaced with agile practices. In this article, I intend to make readers appreciate the various aspects of DevOps realisation and the tools in the open source world that are most popular in the DevOps adoption strategy.
Introducing DevOps as a cultural philosophy
DevOps is not merely a methodology of practices and tools. It is a step beyond that – it is a cultural philosophy that greatly enhances an organisation’s ability to deliver applications and services with increased agility and high quality, by bringing in a mindset of collaboration between traditionally siloed teams. The development and operations teams in the DevOps culture no longer have separate roles and skills that define them. Products are delivered by seamless integration of technologies that require greater insights into both the development and operational aspects of the product. The teams share responsibilities for what they build, improving transparency, communication and collaboration, thereby contributing to the quality and speed of delivery of the final product.
Infrastructure as a Code and OSS tools
Infrastructure as a Code or IaaC is a terminology used in DevOps to describe the model used for the management of infrastructure (networks, load balancers, virtual machines, connections, etc) using the same versioning method that applications and code use for general release. This helps deploy software faster in multiple servers avoiding inconsistencies of software versions in the servers, thereby improving productivity and reducing costs.
Through IaaC, servers and other infrastructure are managed by automation scripts. This makes it faster and easier to maintain servers, maintain consistencies of environments (Dev, QA, Staging, UAT, Prod), reduce risks and manual mistakes, improve overall quality, reduce costs and save time owing to automation of repeated tasks.
There are many IaaC tools that come under the umbrella of configuration management. These tools help configure the software systems on servers that are already provisioned. For example, automating installation of packages, starting services and placing configuration files on the system come under configuration management. A few popular open source tools used for infrastructure configuration management in the Windows environment are Jenkins, Chef, Puppet, Ansible, Vagrant and SaltStack. These tools differ in their simplicity and power; for example, Ansible is agentless, which makes it easy to deploy.
Continuous integration, continuous deployment and OSS tools
Continuous integration allows software developers to continuously merge their changes to a centralised repository. Once code changes are committed to the repository, continuous integration takes over the process of building and testing the new code. Hence, every small change committed to the centralised repository maintains its own integrity.
Continuous deployment is a continuation of continuous integration, wherein the tested code is put into production seamlessly through a pipeline of functions. The background activity of setting up environments for Development, QA, Staging, UAT and Production is taken care of by configuration orchestration tools that are designed to automate the deployment of servers and other infrastructure.
There are many Windows open source tools used for the suite of software development activities that encompass continuous development, continuous integration, continuous testing, continuous deployment, continuous security, and continuous monitoring and logging. Examples of these open source tools for continuous software delivery include Java for programming, MySQL for database, Tomcat for Web services, Eclipse as IDE, Maven or Ant for software builds, GIT or Bit bucket for version control, and Selenium or JUnit for automated testing. Continuous integration and deployment open source tools such as Jenkins are available as plugins and make a ton of integrations possible. A few other open source tools such as CircleCI, TravisCI and TeamCity are used solely for continuous integration activities.
Continuous monitoring open source tools differ from each other in terms of scalability, availability, amount of data, real-time metric handling capacity and user interface. Examples of a few Windows monitoring open source tools are Prometheus, Grafana, New Relic and Nagios. Windows open source tools for continuous security, such as Snyk and Netsparker, help find and fix vulnerabilities automatically. Open source logging stacks like ElasticSearch, LogStash and Kibana (ELK stack) are used to create a clear aggregation and understanding of log files. Many of these tools mentioned are interoperable, and many enterprises choose from a wide repertoire of these solutions for DevOps.
Containerisation and OSS tools
Containerisation has become very prevalent today in the age of cloud. It is an alternative or a companion to virtualisation, allowing encapsulation and packing-up of software code and all its dependencies, configuration files and libraries so that it can run on any infrastructure. It can be seen as an OS-level virtualisation used to deploy and run distributed applications without launching a separate virtual machine for each application. Its popularity is increasing due to its light weight property, resulting in less resource consumption, greater cost savings, efficiency and higher security. In the DevOps world, containerisation accentuates the aspects of integrating portability with continuous delivery of software releases, making the lives of developers and infrastructure engineers easier. The most popular open source tool that supports containerisation is Docker. Many open source containerisation orchestrators like Kubernetes, Docker Swarm, and Apache Mesos support management and orchestration of software containers.
DevOps project management and OSS tools
From the project management point of view, the DevOps product development lifecycle is managed very much like other agile methodologies. The emphasis in DevOps is on automation of software delivery. DevOps projects are handled like any Agile Scrum project, with daily stand-up calls facilitated by a Scrum master. The product owner maintains all the work items and buckets the work into sprints that deliver the product incrementally. Some DevOps projects adopt other agile methodologies like Kanban that use boards to visualise the movement of work items.
A variety of open source tools are available for efficient DevOps project management. For example, Jira and Clarizen allow issue or bug creation and tracking, document sharing, task management and project tracking, Slack allows communication and collaboration and Zoom allows Web conferencing. Most of these tools have customisable and user-friendly interfaces, and integrate with one another.
Finding the right combination of tools is the first step towards a well-designed software solution. DevOps teams prefer to use open source tools to avoid vendor lock-in that is caused by using proprietary stacks exclusively. It helps avoid risks such as vendors ending their support or changing the pricing models. The popularity of these tools allows new members to be on-boarded easily and ensures that the DevOps teams are actively learning and upskilling themselves.