Mdr{dani} Notes

Install Jenkins to AWS EC2 Instance With Ansible

·

4 min read

Cover Image for Install Jenkins to AWS EC2 Instance With Ansible

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 !!

Mdr{dani} Notes

A digital garden where I plant ideas, share thoughts on DevOps, cloud infrastructure, open-source, and my journey in tech. Keep exploring and happy automating!

Explore Topics

Web DevelopmentReactNext.jsGolangOpen SourceTutorials

Supported By

Codeathome
LampungDev

Made with© 2026 Muhamad Dani Ramanda

Powered by HashnodeHosted on Vercel