Jenkins vs Ansible
By Bharath Shrikanth, Community Contributor - November 19, 2020
Any software development organization’s success depends on its culture and its adherence to the right development principles and processes. Over the past decade, DevOps has become the pinnacle of these “right development principles”.
Instead of offering a set of rules, DevOps seeks to create a culture and mindset that helps teams deliver faster without compromising quality. Multiple tools emerged to aid teams with implementing DevOps principles. Build & release automation, test automation, and infrastructure automation form the basis of these tools.
Jenkins, Ansible, GitHub, Nagios, Prometheus, Grafana, SonarQube are a few tools that have gained prominence in this domain. Amongst them, Jenkins is the most widely used automation tool. On the other hand, Ansible has gained popularity in the orchestration domain.
This article will compare two of the most prominent tools – Jenkins and Ansible in order to explore their similarities and differences.
Ansible is an open-source IT engine used to automate application deployment, service orchestration, cloud services, and other IT tools.
Considering the build and release aspects, a critical task would be the deployment of software to the production environment. Configuration management comprises another essential task, required to prepare and maintain said environments.
The number of production servers in an organization may vary from tens to thousands. Managing such vast numbers manually is slow, tedious, and mundane. Additionally, deployments need to be quicker and free of human error. Naturally, automation becomes the answer.
Initially, engineers used to develop shell scripts to deploy applications across multiple servers. This evolved into automation tools, among which Chef, Ansible, Puppet are prominently used.
Ansible has gained popularity in the past few years due to the following reasons:
- The open-source version of Ansible provides a large number of the features that come with the Enterprise version
- Red Hat provides excellent customer support for the Enterprise version
- Ansible offers a simple setup as it uses YAML syntax, which is readable and commonly used
- Capable of handling complex workflows as it is structured into modules, roles, and playbooks
- Highly flexible in terms of orchestrating the environment irrespective of the target OS. Has a flexible inventory declaration
- Ansible is agentless. It works via SSH and removes the overhead of installing and running an agent on the target system
- Owing to its simple structure and way of working, it is comparatively faster than other tools and is highly efficient
- Handles multiple domains such as Configuration Management, Application Deployment, Infrastructure Provisioning, and Orchestration
What is Ansible Tower?
Ansible Tower is the visual dashboard for Ansible. It is built by Red Hat and offers to centralize and control the IT infrastructure. Other functionalities include a role-based access control system, job scheduling, integrated notifications, and graphical inventory management. It can be easily embedded into existing tools and processes using its extensive REST API and CLI.
Following are some of the features Ansible Tower offers:
- Real-time job status updates – This helps users get the job queue and the status of previous jobs for every server
- Multi-playbook workflows – Complex workflows can be divided into multiple reusable playbooks and integrated as required
- Activity Stream provides for auditing – It keeps an account of which job was executed when and with what parameters and configurations
- Scalability – Can be scaled to the extent of 200,000 nodes with 20 cluster nodes
- Integrated Notifications – Multiple connectors available to post notifications to tools like Slack, HipChat, PagerDuty, SMS, Email, etc.
- Provides the option to schedule jobs using cron
- Facilitates easier management and tracking of inventory
Jenkins is an open-source automation tool. Build, testing, and release processes can be automated easily through Jenkins. It provides an array of plugins for integrations with most CI/CD tools. Since it is built on Java, it can run on any OS where Java Runtime Environment (JRE) is installed. Installation can be done through native system packages or can be run as a standalone on any machine. Docker version of Jenkins is also available.
Jenkins has gained wide popularity in the DevOps community due to its versatility and considerable community support. Some of its most celebrated offerings are:
- Continuous Integration and Continuous Delivery – With its enormous number of plugins, it can be set up as a simple CI server and also handle CD for complex projects
- Distributed – Allows connection to multiple slave nodes, which help in distributing the workload across platforms
- Plugins – Almost any tool can be integrated into Jenkins owing to the enormous number of plugins available in its update center. Most companies that develop tools also release a plugin for Jenkins.
- Extensible – Owing to its highly distributed nature and vast plugin support, Jenkins can be used to perform an enormous variety of tasks
- Easy Installation – Ready packages for all operating systems are available in the download center. Java is the only prerequisite for installing Jenkins
- Easy Configuration – A very neat and interactive UI makes configuring projects easy. There is built-in help for most configurations
Ansible vs Jenkins
From the above descriptions of Ansible and Jenkins, it becomes evident that both tools aid implementation of DevOps practices into complex environments. Although their purpose is a bit different, a lot of their usage overlaps. Below is a comparison of these tools.
|Configuration management, application deployment, and infrastructure automation||Automation of Build and Release process and Orchestration of pipelines|
|Contributors||Redhat and the open-source community||Cloudbees, Open Source Lab, CD.Foundation, Redhat, AWS, Github, Jfrog, the open-source community|
|UI Availability||Yes – Ansible tower is the UI dashboard for Ansible||Yes – It is a web dashboard|
|Linux, macOS, and Windows. For Windows, Ansible integrates with Powershell and is a bit cumbersome to use||Linux, Windows, and macOS|
|Syntax||YAML syntax for playbook||Groovy syntax for Pipeline-as-a-code|
|Installation||Setup of Ansible is easy. Setting up Tower can be a bit challenging.||Easy setup with native packages for all OS|
|Configuration||Easy to configure jobs and system||Configuration is a bit tricky owing to the numerous options provided|
|Application weight||Lightweight compared to Jenkins||Heavy-weight application|
|Plugin support||Decent number of plugins available||Plugin support is vast. Almost all tools can be integrated with Jenkins|
|Suitable for containerization?||Yes||Yes|
|License||Proprietary Commercial License||MIT License|
More often than not, Ansible and Jenkins are used together rather than as a replacement for one other. Many teams worldwide use Ansible for orchestration while Jenkins is used for build and release automation.
Based on the requirements, both tools can be highly effective in their domains. Although Ansible Tower can be considered a replacement for Jenkins, it does not yet have the latter’s huge plugin support. Conversely, Jenkins will not be able to handle complex architectures as easily as Ansible Tower.
Which tool to pick: Jenkins or Ansible?
Today, teams need to consider the limitations of both tools and then decide which tool best suits their requirements.
- For complex environments with a vast number of servers, Ansible would be the go-to tool. Its effective inventory management system helps manage the system better.
- For smaller tasks that involve calling multiple tools, like build, code quality analysis, and testing, Jenkins would be a better option.
- Both tools have wide and reliable community support. But Ansible has the experience and might of Redhat behind it.