Pengetahuan

Cara Mengotomatisasi Deployment dengan CI/CD

Siap bikin deployment website-mu jadi super cepat & otomatis? Yuk, kenali cara mengotomatisasi deployment dengan CI/CD! Dari konsep dasar sampai contoh praktis pakai GitHub Actions, rilis software kini lebih mudah dan handal!

Tata Bicara4 Agustus 2025

Dalam dunia pengembangan software modern, Continuous Integration (CI) dan Continuous Delivery/Deployment (CD) adalah praktik esensial yang mempercepat proses pengiriman software, meningkatkan kualitas, dan mengurangi risiko error. Otomatisasi deployment dengan CI/CD berarti kamu bisa merilis perubahan kode lebih sering dan lebih andal.

Panduan ini akan menjelaskan konsep CI/CD dan langkah-langkah dasar untuk mengotomatisasi deployment kamu.

Memahami Konsep CI/CD

Sebelum melangkah lebih jauh, mari pahami apa itu CI dan CD.

1. Continuous Integration (CI)

CI adalah praktik pengembangan di mana developer mengintegrasikan perubahan kode mereka ke main branch repositori bersama sesering mungkin (biasanya beberapa kali sehari). Setiap integrasi kemudian diverifikasi oleh build otomatis dan test otomatis untuk mendeteksi error integrasi sesegera mungkin.

Tujuan CI:

  • Mengurangi bug yang terkait dengan integrasi.

  • Mendeteksi masalah lebih awal.

  • Memastikan kode selalu dalam keadaan siap untuk di-deploy.

  • Meningkatkan kolaborasi tim.

Langkah-langkah CI yang Umum:

  1. Developer menulis kode.

  2. Developer melakukan commit perubahan ke repositori (misalnya Git).

  3. CI server mendeteksi commit baru.

  4. CI server mengambil kode terbaru.

  5. CI server menjalankan build (kompilasi kode, package aplikasi).

  6. CI server menjalankan unit tests, integration tests, dan static code analysis.

  7. Jika semua berhasil, build ditandai "sukses". Jika ada yang gagal, developer terkait diberitahu.

2. Continuous Delivery (CD)

Continuous Delivery adalah kelanjutan dari CI, di mana software yang sudah lulus build dan test otomatis selalu siap untuk dirilis ke lingkungan produksi (atau staging) kapan saja. Proses delivery dari kode yang terintegrasi hingga siap rilis sepenuhnya otomatis, tetapi deployment ke produksi masih memerlukan manual trigger.

Tujuan CD:

  • Memastikan rilis software yang cepat dan andal.

  • Mengurangi waktu yang dibutuhkan untuk membawa fitur baru ke pengguna.

  • Meningkatkan kepercayaan pada proses rilis.

3. Continuous Deployment

Continuous Deployment adalah tingkat otomatisasi tertinggi di mana setiap perubahan kode yang melewati semua tahapan CI dan CD secara otomatis di-deploy ke lingkungan produksi tanpa intervensi manual. Ini berarti kode yang berhasil di-merge akan langsung live.

Tujuan Continuous Deployment:

  • Mencapai delivery yang sangat cepat.

  • Menghilangkan hambatan manual dalam proses rilis.

  • Membebaskan developer dari tugas deployment rutin.

Komponen Kunci dalam Pipeline CI/CD

Untuk mengotomatisasi deployment, kamu memerlukan beberapa tool atau layanan yang bekerja bersama dalam sebuah CI/CD pipeline.

  1. Version Control System (VCS):

    • Peran: Tempat di mana semua kode disimpan dan dikelola. Perubahan kode yang di-commit ke VCS akan memicu pipeline CI/CD.

    • Contoh: Git (GitHub, GitLab, Bitbucket).

  2. CI/CD Tool / Server:

    • Peran: Otak dari pipeline. Mendeteksi perubahan kode, menjalankan build, tests, dan mengorkestrasi langkah-langkah deployment.

    • Contoh:

      • Jenkins: Open-source, sangat fleksibel, dan bisa di-host sendiri.

      • GitLab CI/CD: Terintegrasi langsung dalam GitLab, sangat kuat untuk DevSecOps all-in-one.

      • GitHub Actions: Terintegrasi langsung dalam GitHub, mudah digunakan dan powerful.

      • CircleCI, Travis CI, Bitbucket Pipelines: Layanan CI/CD berbasis cloud.

      • Azure DevOps, AWS CodePipeline: Solusi cloud-native dari provider cloud besar.

  3. Build Tools:

    • Peran: Untuk mengkompilasi kode sumber, mengelola dependensi, dan membuat executable atau package aplikasi.

    • Contoh: Maven/Gradle (Java), npm/Yarn (Node.js), Webpack/Rollup (front-end), Docker (containerization).

  4. Testing Frameworks:

    • Peran: Menjalankan unit tests, integration tests, end-to-end tests, performance tests, dll.

    • Contoh: JUnit (Java), Jest/Cypress (JavaScript), Pytest (Python).

  5. Deployment Environment (Target):

    • Peran: Tempat aplikasi akan di-deploy.

    • Contoh: Server fisik (VM), cloud instances (AWS EC2, Google Compute Engine, Azure VM), container orchestration platforms (Kubernetes), serverless platforms (AWS Lambda, Google Cloud Functions).

Baca Juga : Perbandingan GitLab vs GitHub vs Bitbucket

Langkah-langkah Otomatisasi Deployment dengan CI/CD (Contoh Sederhana)

Mari kita ambil contoh sederhana dengan GitHub (VCS) dan GitHub Actions (CI/CD Tool) untuk deploy aplikasi web sederhana ke server (misalnya, AWS EC2 atau VPS).

Skenario: Deploy Aplikasi Web Statis/Node.js ke VPS dengan SSH

Prasyarat:

  • Repositori Git di GitHub.

  • Aplikasi web sederhana (HTML/CSS/JS atau aplikasi Node.js).

  • Server tujuan (VPS dengan akses SSH).

  • Kunci SSH privat untuk akses server (akan disimpan di GitHub Secrets).

Langkah 1: Siapkan Repositori dan Aplikasi

  1. Buat repositori baru di GitHub.

  2. Unggah kode aplikasi web kamu ke repositori tersebut.

    • Contoh aplikasi Node.js:

      JavaScript
      // app.js
      const express = require('express');
      const app = express();
      const port = 3000;
      
      app.get('/', (req, res) => {
        res.send('Hello from CI/CD deployed app!');
      });
      
      app.listen(port, () => {
        console.log(`App listening at http://localhost:${port}`);
      });
      
    • Sertakan package.json dengan dependencies dan start script.

Langkah 2: Konfigurasi Kunci SSH di GitHub Secrets

Agar GitHub Actions bisa mengakses server kamu, kamu perlu menyimpan kunci SSH privat dengan aman.

  1. Buat pasangan kunci SSH di mesin lokalmu jika belum ada (ssh-keygen).

  2. Salin kunci publik (.pub) ke server tujuanmu (misalnya, ke ~/.ssh/authorized_keys).

  3. Salin kunci privat-nya.

  4. Di repositori GitHub kamu:

    • Pergi ke "Settings" > "Secrets and variables" > "Actions".

    • Klik "New repository secret".

    • Beri nama: SSH_PRIVATE_KEY

    • Tempel kunci privat kamu di kolom "Secret".

Langkah 3: Buat Workflow GitHub Actions

Buat file .github/workflows/deploy.yml di repositori kamu.

YAML

name: CI/CD Deployment to VPS

on:
  push:
    branches:
      - main # Trigger workflow setiap kali ada push ke branch 'main'

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest # Jalankan di lingkungan Ubuntu terbaru

    steps:
    - name: Checkout repository
      uses: actions/checkout@v4 # Mengambil kode dari repositori

    - name: Set up Node.js (if needed for Node.js app)
      uses: actions/setup-node@v4
      with:
        node-version: '18' # Versi Node.js yang digunakan

    - name: Install dependencies (if needed for Node.js app)
      run: npm install # Menginstal dependensi Node.js

    - name: Build project (if needed, e.g., for front-end frameworks)
      run: npm run build # Contoh perintah build untuk front-end

    - name: Deploy to VPS
      uses: appleboy/ssh-action@master # Menggunakan action pihak ketiga untuk SSH
      with:
        host: ${{ secrets.SSH_HOST }} # IP Address atau domain server kamu
        username: ${{ secrets.SSH_USERNAME }} # Username SSH di server
        key: ${{ secrets.SSH_PRIVATE_KEY }} # Kunci privat SSH dari GitHub Secrets
        script: |
          # Perintah-perintah yang akan dijalankan di server
          cd /var/www/my-app # Ganti dengan path direktori aplikasi di server
          git pull origin main # Mengambil perubahan terbaru dari repo
          npm install # Instal dependensi terbaru (untuk Node.js)
          pm2 restart my-app # Restart aplikasi Node.js (jika menggunakan PM2)
          # Atau jika aplikasi statis:
          # cp -r ./* /var/www/html/ # Salin file ke web server root

Penjelasan Penting untuk File deploy.yml:

  • on: push: branches: - main: Workflow ini akan berjalan setiap kali ada push ke branch main.

  • jobs: build-and-deploy: Mendefinisikan satu job bernama build-and-deploy.

  • runs-on: ubuntu-latest: Job ini akan dijalankan pada mesin virtual Ubuntu terbaru yang disediakan GitHub Actions.

  • steps:: Urutan perintah yang akan dijalankan.

    • actions/checkout@v4: Action ini mengunduh kode repositori kamu ke mesin virtual GitHub Actions.

    • actions/setup-node@v4: (Opsional) Jika aplikasi Node.js, ini menginstal Node.js.

    • npm install, npm run build: (Opsional) Perintah build dan instalasi dependensi jika aplikasi kamu membutuhkannya.

    • appleboy/ssh-action@master: Ini adalah Action pihak ketiga yang memfasilitasi koneksi SSH ke server kamu. Kamu perlu mengisi detail host, username, dan kunci privat SSH (dari GitHub Secrets).

    • script: |: Blok ini berisi perintah-perintah shell yang akan dieksekusi di server tujuan via SSH.

      • cd /var/www/my-app: Navigasi ke direktori aplikasi di server.

      • git pull origin main: Mengambil perubahan terbaru dari repositori GitHub. Pastikan server kamu memiliki Git terinstal dan sudah di-setup dengan credential Git yang benar (atau gunakan SSH agent forwarding jika lebih canggih).

      • npm install, pm2 restart my-app: (Contoh untuk Node.js) Menginstal dependensi baru dan me-restart aplikasi. Untuk aplikasi statis, cukup salin file ke lokasi web server.

Langkah 4: Tambahkan Secrets SSH_HOST dan SSH_USERNAME

Sama seperti SSH_PRIVATE_KEY, tambahkan dua secret lagi di GitHub:

  • SSH_HOST: Isi dengan IP address atau domain server kamu.

  • SSH_USERNAME: Isi dengan username SSH untuk server kamu (misal: ubuntu, root, atau username lain).

Langkah 5: Commit dan Push Perubahan

Simpan file deploy.yml dan commit serta push ke branch main di GitHub.

Bash

git add .github/workflows/deploy.yml
git commit -m "Add CI/CD pipeline for deployment"
git push origin main

Hasil:

Setelah kamu push, GitHub Actions akan otomatis mendeteksi perubahan, menjalankan workflow CI/CD Deployment to VPS. Jika semua langkah berhasil, kode aplikasi kamu akan otomatis ter-deploy ke server yang dituju. Kamu bisa memantau progres dan hasil di tab "Actions" di repositori GitHub kamu.

Baca Juga : Github Copilot

Tips Tambahan untuk Deployment yang Lebih Canggih

  • Docker: Gunakan Docker untuk meng-containerize aplikasi kamu. Ini membuat deployment lebih konsisten dan portable. Pipeline CI/CD akan membangun Docker image dan meletakkannya di registry (Docker Hub, GitHub Container Registry), lalu server akan menarik image tersebut.

  • Kubernetes: Untuk skala yang lebih besar, gunakan Kubernetes. CI/CD akan membangun Docker image, meletakkannya di registry, dan kemudian memperbarui manifest Kubernetes untuk menarik image baru.

  • Environment Variables: Gunakan variabel lingkungan untuk konfigurasi yang berbeda antar lingkungan (development, staging, production) daripada meng-hardcode nilai di kode.

  • Rollback Strategy: Siapkan rencana rollback (kembali ke versi sebelumnya) jika deployment gagal atau menyebabkan masalah di produksi.

  • Notifications: Integrasikan pipeline dengan Slack, Email, atau tool notifikasi lain untuk mendapatkan pemberitahuan status deployment.

  • Testing Otomatis: Pastikan pipeline CI-mu memiliki langkah pengujian yang komprehensif (unit, integrasi, end-to-end) sebelum melanjutkan ke deployment.

Otomatisasi deployment dengan CI/CD memang membutuhkan investasi awal dalam setup dan konfigurasi, tetapi manfaat jangka panjang dalam hal kecepatan, keandalan, dan efisiensi jauh lebih besar. Ini adalah praktik standar industri yang akan membuat tim pengembangan kamu jauh lebih produktif.

Share:

0 Komentar