Introduction

In the rapidly evolving world of software development, Continuous Integration/Continuous Deployment (CI/CD) has become a cornerstone of modern DevOps practices. Jenkins, one of the most popular open-source automation servers, facilitates CI/CD by automating the build, test, and deployment phases of the software development process. However, setting up Jenkins can be a repetitive and time-consuming task, which is where Ansible, an automation tool for configuration management, comes into play.

This article provides a step-by-step guide on how to automate the installation and initial setup of Jenkins on a server using Ansible, making it a reproducible and error-free process.

Prerequisites

Before we dive into the Ansible playbook, ensure you have the following prerequisites met:

  • An Ansible control node configured to manage your servers.
  • A target server, which we refer to as jenkins_server in our inventory.
  • The target server must be running a Debian-based operating system since the playbook uses apt for package management.

The Ansible Playbook for Jenkins Installation

An Ansible playbook is a blueprint of automation tasks, which are executed in the order they are defined. The playbook we are discussing is composed of a series of tasks to install Java, add the Jenkins repository, install Jenkins, and ensure the service is running.

Step 1: Installing Java

Jenkins is a Java-based application, so the first task in our playbook installs Java:

- name: Install Java
  ansible.builtin.apt:
    name: default-jdk
    state: present

This task uses the ansible.builtin.apt module to install the default Java Development Kit (JDK) package.

Step 2: Adding the Jenkins Repository Key

To install the latest stable version of Jenkins, we need to add the repository key to our system:

- name: Add Jenkins repository key
  ansible.builtin.apt_key:
    url: https://pkg.jenkins.io/debian/jenkins.io.key
    state: present

This ensures that the packages downloaded from the Jenkins repository are verified and trusted.

Step 3: Adding the Jenkins Repository

Next, we add the actual Jenkins repository from where the Jenkins package will be downloaded:

- name: Add Jenkins repository
  ansible.builtin.apt_repository:
    repo: deb https://pkg.jenkins.io/debian-stable binary/
    state: present

This makes the latest Jenkins releases available to our package manager.

Step 4: Installing Jenkins

With the repository in place, we can proceed to install Jenkins:

- name: Install Jenkins
  ansible.builtin.apt:
    name: jenkins
    state: present
    update_cache: yes

This task not only installs Jenkins but also updates the package cache to ensure we get the latest version available.

Step 5: Starting and Enabling Jenkins

Finally, we need to ensure that the Jenkins service is started and enabled to start on boot:

- name: Start and enable Jenkins
  ansible.builtin.service:
    name: jenkins
    state: started
    enabled: true

This task uses the ansible.builtin.service module to manage the Jenkins service.

Playbook

---
- name: Install and start Jenkins
  hosts: jenkins_server
  become: true
  tasks:
    - name: Install Java
      ansible.builtin.apt:
        name: default-jdk
        state: present

    - name: Add Jenkins repository key
      ansible.builtin.apt_key:
        url: https://pkg.jenkins.io/debian/jenkins.io.key
        state: present

    - name: Add Jenkins repository
      ansible.builtin.apt_repository:
        repo: deb https://pkg.jenkins.io/debian-stable binary/
        state: present

    - name: Install Jenkins
      ansible.builtin.apt:
        name: jenkins
        state: present
        update_cache: true

    - name: Start and enable Jenkins
      ansible.builtin.service:
        name: jenkins
        state: started
        enabled: true

Please note: The Jenkins repository follow the newest key scheme as referred by https://www.jenkins.io/blog/2023/03/27/repository-signing-keys-changing/

Conclusion

By leveraging Ansible’s powerful automation capabilities, you can streamline the process of setting up Jenkins, saving time and reducing the potential for human error. The playbook provided in this article is a fundamental example; you can expand it further to include additional configurations, such as setting up Jenkins users, security settings, and job configurations.

With Ansible, the possibilities for automation are vast, allowing you to spend less time on setup and more time on creating value through your CI/CD pipelines.

Subscribe to the YouTube channel, Medium, and Website, X (formerly Twitter) to not miss the next episode of the Ansible Pilot.

Academy

Learn the Ansible automation technology with some real-life examples in my Udemy 300+ Lessons Video Course.

BUY the Complete Udemy 300+ Lessons Video Course

My book Ansible By Examples: 200+ Automation Examples For Linux and Windows System Administrator and DevOps

BUY the Complete PDF BOOK to easily Copy and Paste the 250+ Ansible code

Want to keep this project going? Please donate

Patreon Buy me a Pizza