DevOps Tools Every Engineer Should Know
Tags: devops, opensource, ansible
Published: 2020-11-02 05:32:29

DevOps is a software development practice that keeps evolving. 
Organizations are moving from the traditional development practices (Waterfall model) to a more agile, effective, and adaptive software development approach (Agile Development).
DevOps was born out of the need to unify Software development and IT Operations, remove silos between teams, increase software delivery velocity, and improve products at a faster pace. 

DevOps share the agile principle of **People-Process-Tools**. Though the **People-Process-Tools** is mentioned in order of priority, none is greater than the other. You need people to commit to a process by using effective tools that deliver working software frequently.

In this article, our focus will be on the tools that help automate the devops processes allowing engineers to design, build, test, deploy, manage, and operate applications and systems faster and reliably. We will be looking at a few tools that can get you started as a DevOps engineer, though the list is endless and can be specific to an organization.

## Git: 
[Git](https://git-scm.com/) is a distributed version control tool, a much-needed tool in a successful CI/CD workflow. With git, developers have a local copy of the source code which is a complete copy of the central repository. Developers can commit each set of changes on their development machine and perform version control operations such as history and compare without a network connection. The development team save their code, track changes, and integrate code changes/updates to a single location. The development team is able to develop, collaborate faster, and perform quick deployment. You can get started with a few [Git command](https://git-scm.com/), a GitHub repository,  and the CLI tool.

## Jenkins: 
[Jenkins](https://www.jenkins.io/) is an open-source automation server that enables developers around the world to reliably build, test, and deploy their software. Jenkins is a standard open-source software for automating continuous integration and continuous delivery (CI/CD) in DevOps. Developers can use Jenkins to automate the build, test, and source code integration continuously. Jenkins takes source code through a pipeline from source code creation all to production deployment. 
With thousands of plugins, Jenkins is highly extensible and integrates with every tool in a [CI/CD](https://www.infoworld.com/article/3271126/what-is-cicd-continuous-integration-and-continuous-delivery-explained.html) toolchain. Jenkins can be easily installed, has a simple GUI to configure and setup your projects.
Jenkins can connect to your GitHub, Bitbucket, or any other code hosting platform to detect code changes. Run automated builds with Gradle, run tests, and deploy a containerized application using Docker to Kubernetes cluster. Jenkins is a versatile tool and its use is limitless and can be extended based on your project demand.

## Docker
[Docker](https://www.docker.com/) is a software tool that provides Operating System(OS) level virtualization in contrast to Virtual machines. It is the world’s leading containerization software platform, a reason you have to learn it. Docker provides containers allowing you to package up your code and all its dependencies into a single unit/application, so the application runs quickly and reliably from one computing environment to another. The container technology help eliminates [“Dependency Hell” and “Environmental Hell”](https://access.redhat.com/blogs/766093/posts/1976463) issues since containers are isolated environments and can run regardless of the infrastructure or environment. Hence, Docker provides a consistent environment throughout the delivery pipeline and is a more agile approach to software development and deployment. You can build your application or environment into Docker images, push them to your Container Registry or DockerHub, share them with your development team, and anyone can pull the image and run it as a container on their machine seamlessly.

## Kubernetes:
[Kubernetes](https://kubernetes.io/) is an open-source container-orchestration software tool, birthed out of the need to automate the deployment, management, maintenance, and scaling of a containerized application. 
We want to run the software, update it and possibly roll it back in case of any code breakages but all this should be done in an automated fashion, so Google developed a standard that metamorphosed into what Kubernetes is today. Kubernetes is now maintained by Cloud Native Computing. Kubernetes has become a standard tool to deploy containerized applications in a production environment. It offers powerful features like self-healing, managing container state and automatically correcting faulty containers, thus, helping us to achieve stable and reliable systems. Organizations that embrace the DevOps approach build Cloud reliant systems on Kubernetes. Kubernetes is a much-needed tool and the probability is quite high that you will need it in the toolchain when building cloud-native applications.

## Ansible:
[Ansible](https://www.ansible.com/) is an open-source software provisioning,  configuration management, application deployment tool enabling Infrastructure as Code, IaC, a practice of automating the provisioning of infrastructure through the same versioning as the DevOps team uses for source code. The Infrastructure as Code is a representation of your Infrastructure in a particular state, allowing you to provision and de-provision infrastructure resources in a reliable manner. Ansible uses IaC, Ansible playbooks, a YAML file; which is a step by step instruction on how to provision and configure the infrastructure your application is to run on. This is very helpful when you are considering moving your application from the development stage to the testing and production stage but need to replicate hundreds of infrastructure resources, say VMs, with typical environments, to accommodate the load. Ansible is an agentless automation tool with less learning curve, easy to install, and get up running to handle your configuration management jobs, and automate repeatable tasks using playbooks. Ansible has become more popular than its counterpart; Puppet and Chef. Ansible uses SSH by default to connect, communicate, and operate on an inventory list of servers, simplifying strenuous repeatable tasks that would have taken a long time to finish.


## Prometheus and Grafana:
We have looked at tools that can help us automate our repeatable task from versioning and managing our code, deploying applications, and provisioning and maintaining the infrastructure on which our application runs. It is very important that we monitor the performance of our applications and infrastructure so we continuously deliver value to our customers. We need tools to monitor the health of our systems and give feedback. DevOps team act on the information generated in order to mitigate any possible issues that may hinder service delivery to the users. This is where Prometheus and Grafana come in. 
[Prometheus and Grafana](https://prometheus.io/docs/visualization/grafana/) are monitoring stacks used by DevOps teams for storing and visualizing time series data. Prometheus acts as the storage backend, collecting metrics from monitored targets while Grafana is the visualization layer for the analysis of the monitoring data received. This allows the DevOps team to have a full view of how their applications, processes, and tools are performing and have the opportunity to measure how much value is delivered to the users. 

### **Conclusion**
As a DevOps engineer, theoretical knowledge is not enough, one must have the knowledge of practicing DevOps and know the various DevOps tool needed to perform tasks in everyday DevOps setting. 
The tools mentioned above are in no particular order and in no favor of any organization. 
The list of DevOps tools is endless and organizations                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         practicing DevOps are very specific to the tools they use as determined by the project needs. 

Please let me know what your opinions 🤔 are on this topic. 
You can also share in the comment which tools your organization use and what requirements guided the decision to choose those tools.

Thank you for reading!!! 🙏