Install Jenkins to AWS EC2 Instance With Ansible
4 min read

Setelah berhasil melakukan provisioning server EC2 dengan Terraform di artikel sebelumnya, sekarang kita memiliki server kosong. Melakukan instalasi manual via SSH tentu membosankan dan tidak efisien. Di sinilah Ansible masuk sebagai alat Configuration Management untuk mengotomatisasi instalasi Jenkins secara konsisten.

Menyiapkan Inventory: Gerbang Akses Ansible
Langkah pertama dalam Ansible adalah mendefinisikan Inventory. File ini memberi tahu Ansible server mana yang akan dikelola dan bagaimana cara mengaksesnya.
Implementasi: inventory
[jenkins_server]
18.143.101.** # Ganti dengan Public IP dari output Terraform sebelumnya
[all:vars]
ansible_user=ubuntu
ansible_ssh_private_key_file=/home/cehamot/BigprojectStudiDevops/mdrdani.pem
ansible_ssh_common_args='-o StrictHostKeyChecking=no'
Dalam mengelola infrastruktur, langkah pertama selalu memastikan OS dalam keadaan up-to-date. Namun, kita harus menangani perbedaan package manager antar distribusi Linux dengan elegan menggunakan Ansible Modules, bukan sekadar menjalankan perintah shell mentah.
Implementasi: roles/update-OS/tasks/main.yaml
- name: Update cache and upgrade packages for Debian/Ubuntu
apt:
update_cache: yes
upgrade: dist
when: ansible_os_family == "Debian"
- name: Update all packages for RedHat/CentOS
yum:
name: "*"
state: latest
when: ansible_os_family == "RedHat"
Menginstal Jenkins secara manual melibatkan banyak langkah repetitif: menambah GPG key, mendaftarkan repository, hingga mengatur service systemd. Dengan Ansible, kita merangkum semua langkah tersebut menjadi satu alur kerja yang deklaratif dan aman.
Implementasi: roles/jenkins/tasks/main.yaml
- name: Ensure Java is installed (Jenkins Requirement)
apt:
name: openjdk-17-jre
state: present
update_cache: yes
- name: Import Jenkins GPG key
ansible.builtin.get_url:
url: https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key
dest: /usr/share/keyrings/jenkins-keyring.asc
mode: '0644'
- name: Add Jenkins Repository
ansible.builtin.apt_repository:
repo: "deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] https://pkg.jenkins.io/debian-stable binary/"
state: present
update_cache: yes # Ini menggantikan perintah 'shell: apt update'
- name: Install Jenkins
apt:
name: jenkins
state: latest
- name: Ensure Jenkins service is started and enabled
ansible.builtin.systemd:
name: jenkins
state: started
enabled: yes
daemon_reload: yes
Agar struktur kode kita bersih dan modular, kita memisahkan instalasi Java ke dalam role tersendiri. Java adalah prasyarat mutlak bagi Jenkins. Tanpa Java, mesin automasi kita tidak akan pernah bisa bernapas.
Implementasi: roles/java/tasks/main.yaml
- name: Install OpenJDK 17 (Required for Jenkins)
become: yes
apt:
name: openjdk-17-jre
state: present
update_cache: yes
Untuk membuat Jenkins kita lebih powerful, kita akan menginstal Docker sebagai container runtime. Ini memungkinkan Jenkins untuk menjalankan build pipeline di dalam lingkungan yang terisolasi.
Implementasi: roles/docker/tasks/main.yaml
- name: Install Docker dependencies
apt:
name:
- apt-transport-https
- ca-certificates
- curl
- gnupg
- software-properties-common
state: present
update_cache: yes
- name: Add Docker Official GPG key
ansible.builtin.apt_key:
url: https://download.docker.com/linux/ubuntu/gpg
state: present
- name: Add Docker Repository
ansible.builtin.apt_repository:
repo: "deb [arch=amd64] https://download.docker.com/linux/ubuntu {{ ansible_distribution_release }} stable"
state: present
- name: Install Docker Engine
apt:
name:
- docker-ce
- docker-ce-cli
- containerd.io
state: latest
update_cache: yes
- name: Add 'jenkins' user to docker group
ansible.builtin.user:
name: jenkins
groups: docker
append: yes
- name: Ensure Docker service is running and enabled
service:
name: docker
state: started
enabled: yes
Setelah kita membangun role satu per satu secara modular, saatnya kita menyusun "orkestra" automasi kita. File Master Playbook ini berfungsi untuk menentukan di server mana konfigurasi akan dijalankan dan urutan role apa saja yang harus dieksekusi agar server Jenkins kita siap tempur.
Implementasi: server-jenkins-playbook.yaml
- name: Deployment Jenkins Server on AWS EC2
hosts: jenkins_server # Harus sinkron dengan nama grup di file inventory
become: yes
roles:
- update-os
- java
- jenkins
- docker
Inilah keajaiban dari Infrastructure as Code. Hanya dengan satu perintah, Ansible akan masuk ke server AWS kamu melalui SSH, melakukan pembaruan sistem, menginstal Java, Jenkins, hingga melakukan konfigurasi Docker secara otomatis.
Perintah Eksekusi
Jalankan perintah berikut di terminal kamu:
$ ansible-playbook -i inventory server-jenkins-playbook.yaml

1. Membuka Akses Firewall (AWS Security Group)
Jika kamu mencoba mengakses IP Public di browser dan mendapati connection timed out, itu karena port default Jenkins (8080) masih tertutup oleh AWS.

Langkah-langkah:
Buka AWS Management Console > EC2 Dashboard.
Pilih instance kamu, lalu klik tab Security.
Klik link Security Groups yang aktif.
Pilih Edit Inbound Rules, lalu tambahkan aturan berikut:
Type: Custom TCP
Port Range: 8080
Source: 0.0.0.0/0 (Atau IP kamu sendiri untuk keamanan lebih tinggi)
Klik Save Rules.

2. Unlock Jenkins
Akses kembali browser kamu dengan format http://<IP_PUBLIC_EC2>:8080. Kamu akan melihat halaman Unlock Jenkins. Untuk mendapatkan password admin, masuk ke terminal instance kamu dan jalankan perintah:
sudo cat /var/lib/jenkins/secrets/initialAdminPassword


Salin kode unik yang muncul, tempelkan ke kolom Administrator Password, lalu klik Continue.

3. Instalasi Plugin & Setup User
Install Suggested Plugins: Pilih opsi ini agar Jenkins secara otomatis menginstal plugin standar seperti Git, Pipeline, dan SSH.
Create First Admin User: Masukkan detail akun kamu (Username, Password, Full Name). Jangan sampai lupa kredensial ini!
Instance Configuration: Pastikan Jenkins URL sudah sesuai dengan IP Public instance kamu.

sampai di sini pastikan URL sama dengan yang link browser di atas nya. save and finish
Yey Start using jenkins !!



