Ansible is a tool invented for making depoyment of applications and environments effefortless and reliable. The tool is developed and maintained by Red Hat, making it dependent on a Rat Hat distribution of Linux.
From my experience developers have gotten familiar with the idea of having an application within a Docker container. This makes the deployment of both the environment and the application simple and easy.
Although Docker containers are a step in the right direction, it is still a hassel to deploy multiple containers over multiple nodes as the same time. From my perspective, this is a normal scenario for a micro-service architecture.
This is where Ansible comes into the picture. Ansible is able to manage the deployment of various application and containers through YAML configuration file (playbook) and a predefined file structure (we will see an example later…).
Ansible is essentially making a SSH connection to the desired node for deployment, transfering the necessary content to the node (SCP), and finally setting up the environment and application to match the playbook configration.
In many scenarioes the playbook configuration may be reused for different environments (e.g. customers). It will only be necessary to change the content of the Ansible file strcuture. Thereby changing the content (e.g application configurations) which will be deployed, but not the process which it will follow.
It is also worth mentioning, that other tools like Ansible also exists (e.g. Salt). However, Ansible has the benefit of not having any requirements for preinstalled packages on the nodes to be deployed on. If Ansible can SSH to the node, it can deploy to it.