How to install and configure Jenkins using Ansible Playbook

How to install and configure Jenkins using Ansible Playbook

ansible_playbook.jpg

Here in this article we will see how we can install and configure jenkins using the Ansible Playbook.

Test Environment

Ansible Controller – Fedora 32 linux with ansible installed
Ansible Node – Fedora 32 linux remote node

For setting up a Jenkins service on a remote note we need the below minimum requirements that should be satisfied.

  • Remote node with Fedora 32 installed
  • Minimum RAM – 256 MB
  • Minimum HD – 1 GB

Once we have the remote node setup with the above requirements we can go ahead and execute our tasks for setting up the jenkins using the the playbook. Here are the high level details of the tasks that we will carry out as a part of this activity.

  • JRE – Java 8 with 64 bit for run execution
  • JDK/JRE – Java 8 or 11 for job execution
  • Adding the Jenkins Repository
  • Installing the Jenkins and Java development packages
  • Start the Jenkins service
  • Add jenkins service and port 8080 to allow from firewall

If you are interested in watching video. Here is the YouTube video on the same step by step procedure outlined below.

Procedure

Step1: Ensure Jenkins repository is added

Create the below playbook to add the jenkins repository to install the packages and import the gpg key.

Ansible playbook to setup jenkins repository and install jenkis and its dependencies

$ cat setup_jenkins.yaml

---
- hosts: stack
  remote_user: admin
  become: true
  tasks:
    - name: Ensure Jenkins repository is added
      yum_repository:
        name: jenkins-ci
        description: jenkins-ci package repository
        baseurl: http://pkg.jenkins.io/redhat
        gpgkey: https://pkg.jenkins.io/redhat/jenkins.io.key
        gpgcheck: yes
    - name: Ensure gpp key is imported
      rpm_key:
        state: present
        key: https://pkg.jenkins.io/redhat/jenkins.io.key
    - name: Ensure Jenkins and java-devel package installed
      yum:
        name: '{{ packages }}'
        state: present
        update_cache: true
      vars:
        packages:
          - jenkins
          - java-devel

Execute the below playbook to add the jenkins repository.

$ ansible-playbook setup_jenkins.yaml -K
BECOME password: 

PLAY [stack] *************************************************************************************************************************************************

TASK [Gathering Facts] ***************************************************************************************************************************************
ok: [192.168.47.130]

TASK [Ensure Jenkins repository is added] ********************************************************************************************************************
changed: [192.168.47.130]

TASK [Ensure gpp key is imported] ****************************************************************************************************************************
changed: [192.168.47.130]

TASK [Ensure Jenkins and java-devel package installed] *******************************************************************************************************
changed: [192.168.47.130]

PLAY RECAP ***************************************************************************************************************************************************
192.168.47.130             : ok=4    changed=3    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

Validate the remote node whether the repository got added or not.

$ cat jenkins-ci.repo 

baseurl = http://pkg.jenkins.io/redhat
gpgcheck = 1
gpgkey = https://pkg.jenkins.io/redhat/jenkins.io.key
name = jenkins-ci package repository

$ rpm -qa | grep jenkins

jenkins-2.286-1.1.noarch

$ rpm -qa | grep java-1.8.0-openjdk-devel* 

java-1.8.0-openjdk-devel-1.8.0.282.b08-0.fc32.x86_64

Step2: Start and Enable the Jenkins service with firewall service and port enabled

Update Ansible Playbook to Start the Jenkins service and open firewall port and service

$ cat setup_jenkins.yaml 

---
- hosts: stack
  remote_user: admin
  become: true
  tasks:
    - name: Ensure Jenkins repository is added
      yum_repository:
        name: jenkins-ci
        description: jenkins-ci package repository
        baseurl: http://pkg.jenkins.io/redhat
        gpgkey: https://pkg.jenkins.io/redhat/jenkins.io.key
        gpgcheck: yes
    - name: Ensure gpp key is imported
      rpm_key:
        state: present
        key: https://pkg.jenkins.io/redhat/jenkins.io.key
    - name: Ensure Jenkins and java-devel package installed
      yum:
        name: '{{ packages }}'
        state: present
        update_cache: true
      vars:
        packages:
          - jenkins
          - java-devel
    - name: Ensure systemd daemon reloaded
      command: systemctl daemon-reload
    - name: Ensure Jenkins service is enabled and started
      service:
        name: jenkins
        state: started
    - name: Ensure jenkins service added to firewalld
      firewalld:
        service: jenkins
        state: enabled
        permanent: yes
        immediate: yes
    - name: Ensure port 8080 added to firewalld
      firewalld:
        port: 8080/tcp
        state: enabled
        permanent: yes
        immediate: yes

Validate the remote node whether the firewall setup completed and service is running or not.

$ sudo firewall-cmd --list-all
[sudo] password for admin: 
FedoraServer (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens33
  sources: 
  services: cockpit dhcpv6-client http https jenkins ssh
  ports: 8080/tcp
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
$ systemctl status jenkins.service 
● jenkins.service - LSB: Jenkins Automation Server
     Loaded: loaded (/etc/rc.d/init.d/jenkins; generated)
     Active: active (running) since Sat 2021-04-10 07:27:11 IST; 1h 0min ago
       Docs: man:systemd-sysv-generator(8)
      Tasks: 35 (limit: 2292)
     Memory: 429.4M
        CPU: 55.586s
     CGroup: /system.slice/jenkins.service
             └─1906 /etc/alternatives/java -Dcom.sun.akuma.Daemon=daemonized -Djava.awt.headless=true -DJENKINS_HOME=/var/lib/jenki>
...

Step3: Validate the Jenkins service url

Access the Jenkins URL from remote network.

URL - http://192.168.47.130:8080/

First time when you access the Jenkins url, it will ask to enter the jenkins user default password available in a particular file and then setup the user with which you want to login to the Jenkins portal. Once the user setup is completed it will ask to install a set of plugins or customize the plugin list that you want to install. Once you select on of those options the plugins will be installed and your Jenkins server is ready for use.

Hope you enjoyed reading this article. Thank you..