Sebelum memulai praktik, pastikan Anda telah memahami konsep dasar pada materi kelas Server & DevOps di infokoding.

BAB 7

CI/CD Dasar (Automasi Deployment)

Selamat tinggal unggah file ZIP via FTP! Belajar bagaimana mendorong kode (push) ke GitHub dan server langsung ter-update otomatis.

TL;DR (Ringkasan Eksekutif)

Estimasi Waktu: 30 Menit Tingkat Kesulitan: Menengah
  • Transisi metode upload manual (FTP) ke eksekusi proaktif menggunakan GitHub Actions.
  • Praktik mengamankan server menggunakan SSH Keys tanpa password dan penerapan non-root user.
  • Injeksi kredensial peladen yang aman melalui GitHub Secrets.
  • Penulisan alur kerja otomatis (YAML) berserta kapabilitas rollback instan yang akan menarik (pull) dan membangun ulang (build) kode di VPS setiap kali pengembang memicu git push.

Tanya-Jawab Cepat (Q&A Terminologi)

T: Apa itu CI/CD?

J: CI/CD adalah praktik DevOps untuk mengotomatisasi integrasi dan pengiriman kode ke server produksi tanpa campur tangan manual.

T: Apa fungsi GitHub Actions?

J: Layanan komputasi cloud bawaan GitHub yang menjalankan skrip terprogram (runner) setiap kali ada mutasi kode di repositori.

T: Mengapa butuh SSH Keys dan Secrets?

J: SSH Keys memberikan GitHub akses mesin-ke-mesin tanpa password, sedangkan Secrets menjaga kunci tersebut terenkripsi rapat dari publik.

CI/CD (Continuous Integration / Continuous Deployment) adalah budaya dan praktik mutlak dalam kultur DevOps untuk mendistribusikan kode tanpa campur tangan manusia. Selamat tinggal hari-hari di mana Anda mengunggah file `.zip` atau menggunakan FileZilla secara manual!

Tabel Komparasi Ringkas: FTP vs CI/CD Actions

Aspek Deployment Tradisional (FTP / FileZilla) Modern (CI/CD)
Kecepatan Eksekusi Sangat lambat (Unggah file satu per satu) Instan (Hanya hitungan detik via Git)
Risiko Human Error Sangat tinggi (Rentan salah timpa folder) Nihil (Dieksekusi otomatis oleh mesin)
Penanganan Downtime Downtime panjang jika terjadi error fatal Otomatis di-rollback dalam hitungan detik
Jejak Audit Keamanan Tidak ada riwayat mutasi kolaborasi Terekam detail di histori commit Git
Diagram Alur Visual Komparasi Deployment Tradisional FTP vs Modern CI/CD GitHub Actions

1. Belajar DevOps: Persiapan Server dan Pembuatan SSH Keys

Pembuatan SSH Keys adalah proses komputasi kriptografi untuk men-generate sepasang kunci digital (publik dan privat) guna mengamankan akses otentikasi server jarak jauh tanpa menggunakan password tradisional.

Agar GitHub Actions dapat "masuk" ke VPS Anda dan mengeksekusi perintah terminal, kita membutuhkan kunci kriptografi. Praktik Keamanan (Security Best Practice): Jangan pernah mengeksekusi deploy menggunakan user root. Buatlah user khusus (misal: deployer) dengan hak akses terbatas yang hanya memiliki kewenangan pada direktori public_html.

Langkah-Langkah Konfigurasi SSH Keys (Terminal)

  1. Generate Key: Jalankan perintah pembuatan kunci di VPS menggunakan algoritma ed25519 (sebagai user aplikasi).
  2. Bypass Passphrase: Kosongkan sandi (tekan Enter dua kali) agar GitHub dapat terhubung secara non-interaktif tanpa prompt kata sandi.
  3. Otorisasi Kunci Publik: Masukkan Public Key yang dihasilkan ke dalam daftar file authorized_keys dengan hak akses aman (chmod 600).
  4. Ekspor Kunci Privat: Tampilkan teks dari Private Key untuk disalin secara utuh ke dalam GitHub Secrets.
ssh-keygen -t ed25519 -C "github-actions-deploy"
cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
cat ~/.ssh/id_ed25519

2. Konfigurasi Keamanan GitHub Secrets

GitHub Secrets adalah brankas enkripsi bawaan repositori yang berfungsi menyimpan variabel kredensial sensitif (seperti IP Server dan Private Key) agar terisolasi dari kode publik dan log eksekusi.

Salin seluruh teks Private Key dari langkah sebelumnya (dimulai dari baris -----BEGIN OPENSSH PRIVATE KEY-----). Kemudian, masuk ke repositori GitHub Anda:

  1. Navigasi ke menu Settings > Secrets and variables > Actions.
  2. Klik tombol New repository secret.
  3. Buat tiga rahasia (secrets) berikut:
    • SERVER_IP : Alamat IP publik VPS Anda (misal: 192.168.1.10)
    • SERVER_USERNAME : Nama user di VPS Anda (misal: ubuntu atau infokoding)
    • SSH_PRIVATE_KEY : Tempelkan kunci privat yang baru saja Anda salin.

3. Script Workflow CI/CD (.github/workflows/deploy.yml)

Script Workflow (YAML) adalah berkas konfigurasi deklaratif yang berisi set instruksi terprogram bagi mesin runner GitHub Actions untuk melakukan kompilasi dan penyebaran kode ke server produksi.

Struktur Direktori Workflow

Selanjutnya, Anda harus mendefinisikan instruksi apa saja yang harus dieksekusi oleh bot GitHub di server Anda. Buat sebuah file baru tepat di direktori proyek lokal Anda pada jalur .github/workflows/deploy.yml.

Penjelasan Perintah YAML

name: Deploy Aplikasi ke VPS Produksi

on:
  push:
    branches:
      - main  # Memicu deployment setiap ada push ke branch main

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Eksekusi Perintah Deployment via SSH
        uses: appleboy/ssh-action@v1.0.3
        with:
          host: ${{ secrets.SERVER_IP }}
          username: ${{ secrets.SERVER_USERNAME }}
          key: ${{ secrets.SSH_PRIVATE_KEY }}
          port: 22
          script: |
            # 1. Navigasi ke direktori aplikasi & simpan hash commit saat ini untuk rollback
            cd /home/infokoding/public_html
            OLD_HASH=$(git rev-parse HEAD)
            
            # 2. Tarik kode terbaru & rollback otomatis jika gagal (|| OR operator)
            git pull origin main || { git reset --hard $OLD_HASH; exit 1; }
            
            # 3. Instal dependensi PHP (Abaikan jika menggunakan Node.js/Go)
            composer install --no-dev --optimize-autoloader || { git reset --hard $OLD_HASH; exit 1; }
            
            # 4. Hapus cache atau restart service
            php spark cache:clear
            sudo systemctl restart php8.2-fpm

Begitu Anda melakukan commit dan push berkas YAML ini, buka tab Actions di GitHub untuk melihat pipeline Anda menyala hijau seketika!

Tips Belajar DevOps: Troubleshooting Error Deployment

  • Host key verification failed: Pastikan Anda tidak menggunakan Strict Host Key Checking yang agresif atau pastikan SSH Key memiliki hak akses yang benar. Plugin appleboy/ssh-action biasanya menangani hal ini otomatis.
  • Permission Denied (publickey): Verifikasi apakah kunci publik (.pub) sudah dimasukkan ke authorized_keys dengan hak akses (chmod 600). Pastikan Anda menyalin seluruh isi kunci privat tanpa spasi ekstra di GitHub Secrets.
  • Perintah Git tertolak (Merge Conflicts): Jangan pernah mengedit kode langsung di dalam VPS produksi! Ini akan membuat perintah git pull bentrok. Lakukan git reset --hard origin/main jika server Anda berantakan.
  • Koneksi Timeout (Terblokir UFW): Jika Anda menggunakan Firewall (UFW) yang sangat restriktif, akses SSH dari GitHub bisa diblokir. Secara praktis, izinkan lalu lintas port 22 global (sudo ufw allow ssh) dengan tetap mengandalkan keamanan lapis Private Key kriptografi, atau gunakan API meta GitHub untuk melakukan *whitelist* rentang IP GitHub Actions dinamis ke dalam aturan sistem operasi Anda.

Glosarium Singkat (Terminologi DevOps)

SSH Keys
Pasangan kunci kriptografi (publik dan privat) yang digunakan untuk otentikasi log masuk jarak jauh tanpa menggunakan password yang rentan dibobol (brute-force).
YAML (.yml)
Format serialisasi data yang sangat mudah dibaca manusia, menjadi standar de-facto industri untuk menulis file konfigurasi deklaratif alur kerja (workflow) di sistem seperti Docker, Kubernetes, dan GitHub Actions.
VPS (Virtual Private Server)
Mesin virtual mandiri di cloud yang memberikan Anda hak akses root penuh untuk menginstal dan mengonfigurasi aplikasi dasar, berbeda dengan Shared Hosting yang dibatasi oleh penyedia.

Untuk mendalami skema penulisan dan batasan penggunaan runners, Anda dapat merujuk langsung pada dokumentasi resmi dari GitHub:


Rusmawan Abdullah Sani

Ditulis oleh Rusmawan Abdullah Sani., S.Kom (GitHub)

Berpengalaman luas dalam pengembangan perangkat lunak dan arsitektur sistem berbasis web modern. Rusmawan memiliki dedikasi tinggi untuk merancang struktur kode yang bersih (Clean Code) dan mentransfer pengetahuan teknis berstandar industri kepada para pengembang muda di Indonesia.