Hana — VyuApp Support
Online
20/20 pesan tersisa
🌸 Selamat datang di VyuApp! Saya Hana, ada yang bisa saya bantu hari ini?
Semua artikel

Engineering

Cara Setup CI/CD Pipeline dengan GitHub Actions

Continuous Integration dan Continuous Delivery (CI/CD) menjadi tulang punggung pengembangan perangkat lunak modern. Dengan memanfaatkan platform GitHub...

2 Agustus 2026 14 min read#github-actions#ci-cd#devops#automation
Cara Setup CI/CD Pipeline dengan GitHub Actions
Cara Setup CI/CD Pipeline dengan GitHub Actions: Panduan Lengkap 2026

Continuous Integration dan Continuous Delivery (CI/CD) menjadi tulang punggung pengembangan perangkat lunak modern. Dengan memanfaatkan platform GitHub Actions, Anda bisa membangun pipeline otomatis yang melakukan build, test, hingga mengirim kode ke server produksi — semuanya tanpa campur tangan manual. Artikel ini memandu Anda langkah demi langkah dari persiapan server hingga konfigurasi workflow siap pakai.

Dashboard monitoring pipeline CI/CD di layar komputer

Mengapa Otomasi Pipeline Dibutuhkan dalam Pengembangan Perangkat Lunak

Sebelum masuk ke teknis implementasi, mari kita pahami mengapa pipeline otomatis menjadi kebutuhan mutlak bagi tim pengembang saat ini. Dalam workflow manual, seorang developer harus melakukan beberapa tahap berulang setiap kali kode diperbarui: menarik kode terbaru, menjalankan pengujian lokal, membangun artefak, lalu mengirim ke server produksi. Proses ini rentan terhadap human error, memakan waktu, dan sulit direproduksi secara konsisten.

Otomasi pipeline mengatasi masalah tersebut dengan menjalankan seluruh proses secara otomatis setiap kali ada perubahan kode. Berikut manfaat utama yang langsung dirasakan oleh tim pengembang:

  • Konsistensi mutlak — setiap commit diuji dan diproses dengan cara yang sama, tanpa bergantung pada kondisi mental atau lingkungan lokal developer
  • Kecepatan rilis — kemampuan baru bisa sampai ke pengguna akhir dalam hitungan menit, bukan hari
  • Deteksi dini masalah — error pada kode tertangkap sebelum mengenai produksi, meminimalkan downtime
  • Rollback lebih mudah — jika ada masalah, cukup revert commit dan pipeline akan memproses ulang secara otomatis
  • Keamanan terjaga — pemindaian kerentanan berjalan di setiap tahap, bukan hanya saat release besar

Menurut survei State of DevOps 2024 yang dilakukan oleh DORA, tim yang menerapkan CI/CD secara konsisten memiliki frekuensi rilis 973 kali lebih sering dan waktu pemulihan dari kegagalan 6.570 kali lebih cepat dibandingkan tim yang masih menjalankan proses manual. Data ini menunjukkan bahwa investasi dalam otomasi pipeline memberikan pengembalian yang besar bagi produktivitas tim.

Komponen Utama Actions sebagai Platform CI/CD

GitHub Actions dirancang dengan arsitektur event-driven, yang berarti setiap pipeline dipicu oleh peristiwa tertentu di dalam repository. Berikut penjelasan komponen-komponen yang membentuk sebuah workflow lengkap yang perlu Anda pahami sebelum mulai mengonfigurasi:

Komponen Fungsi Contoh Nilai
Trigger Menentukan kapan pipeline dijalankan push, pull request, schedule, workflow dispatch
Jobs Sekumpulan task yang bisa berjalan paralel atau berurutan test, build, lint, security scan
Steps Setiap langkah dalam job — berupa action atau perintah shell checkout, setup-node, npm test
Runner Mesin virtual yang menjalankan workflow ubuntu-latest, windows-latest, self-hosted
Secrets Penyimpanan data sensitif yang terenkripsi SSH KEY, API TOKEN, HOST
Artifacts File output dari pipeline yang bisa diunduh atau dilanjutkan build folder, coverage report
Terminal komputer menampilkan kode workflow YAML untuk otomasi pipeline

File workflow ditulis dalam format YAML dan disimpan di direktori .github/workflows/ di dalam repository. Setiap file merepresentasikan satu pipeline terpisah. Platform ini menyediakan ribuan marketplace action yang bisa Anda gunakan, mulai dari setup environment hingga integrasi dengan layanan cloud seperti AWS, Google Cloud, dan DigitalOcean.

Salah satu keunggulan utama platform ini adalah model pricing yang murah hati. Repository publik mendapat akses gratis tanpa batas menit, sedangkan repository privat mendapat 2.000 menit per bulan tanpa biaya. Runner yang disediakan memiliki spesifikasi standar yang cukup untuk sebagian besar kebutuhan pipeline, sehingga Anda tidak perlu mengelola infrastruktur build sendiri. Waktu eksekusi yang cepat dan biaya yang terjangkau menjadikan platform ini pilihan utama bagi developer Indonesia yang ingin memulai otomasi tanpa investasi infrastruktur besar.

Persiapan Server VPS untuk Peluncuran Otomatis

Sebelum membuat workflow, pastikan server siap menerima kode dari pipeline. Persiapan ini dilakukan sekali saja dan akan digunakan untuk setiap eksekusi pipeline selanjutnya. Proses persiapan mencakup pembuatan akun khusus, pengaturan kunci autentikasi, dan verifikasi koneksi.

1. Siapkan Akun Khusus untuk Proses Peluncuran

Jangan pernah menggunakan akun root untuk keperluan otomasi. Siapkan akun khusus dengan hak akses minimum yang diperlukan agar keamanan server tetap terjaga. Akun khusus ini hanya memiliki izin untuk menjalankan perintah spesifik yang berkaitan dengan peluncuran aplikasi:

# Siapkan akun baru untuk keperluan peluncuran
sudo adduser deployer
sudo usermod -aG sudo deployer

# Beri hak akses terbatas via sudoers
sudo visudo
# Tambahkan baris berikut:
# deployer ALL=(ALL) NOPASSWD: /bin/systemctl restart myapp

# Siapkan direktori untuk aplikasi
sudo mkdir -p /var/www/myapp
sudo chown deployer:deployer /var/www/myapp

2. Siapkan Kunci SSH untuk Autentikasi

Kunci SSH memungkinkan pipeline menghubungi server tanpa perlu memasukkan password. Generate kunci di komputer lokal Anda, lalu salin public key ke VPS. Private key akan disimpan sebagai rahasia di repository GitHub:

# Generate pasangan kunci SSH khusus untuk otomasi
ssh-keygen -t ed25519 -C "github-actions-deploy" -f ~/.ssh/deploykey -N ""

# Salin public key ke server
ssh-copy-id -i ~/.ssh/deploykey.pub deployer@IPADDR

# Tampilkan private key untuk disimpan ke Rahasia Repository
cat ~/.ssh/deploykey

3. Verifikasi Koneksi SSH

Setelah mengatur kunci, pastikan koneksi SSH berfungsi tanpa diminta password. Ini memastikan pipeline bisa menghubungi server secara otomatis saat dijalankan:

# Tes koneksi tanpa password
ssh -i ~/.ssh/deploykey deployer@IPADDR "echo 'Koneksi berhasil'"

# Jika berhasil, hapus private key dari komputer lokal
rm ~/.ssh/deploykey ~/.ssh/deploykey.pub
Server rack di data center tempat VPS dihosting untuk keperluan peluncuran aplikasi

Penting untuk dicatat bahwa kunci private hanya perlu ada di satu tempat: Rahasia Repository di GitHub. Jangan menyimpannya di komputer lokal lebih lama dari yang diperlukan. Ini meminimalkan risiko jika komputer lokal Anda terkompromi. Selalu gunakan tipe kunci ed25519 yang lebih aman dibandingkan RSA untuk autentikasi.

Konfigurasi Rahasia Repository

Rahasia Repository (Repository Secrets) digunakan untuk menyimpan data sensitif yang tidak boleh terekspos ke publik. Buka repository Anda di GitHub, lalu navigasi ke Settings, pilih menu Secrets, kemudian pilih Actions, dan tambahkan secret baru dengan nama serta nilai yang sesuai.

Tambahkan rahasia berikut yang akan digunakan oleh pipeline:

Nama Rahasia Isi Cara Mendapatkan
VPSHOST IP address server Dari panel provider
VPSUSER Nama akun peluncuran Contoh: deployer
VPSSHKEY Isi private key SSH Output perintah cat deploykey
VPSPORT Port SSH Default: 22

Selalu gunakan Rahasia Repository untuk data sensitif. Jangan pernah menyimpan kunci, token, atau password langsung di dalam file workflow. Semua rahasia terenkripsi dan tidak akan tampil di log eksekusi pipeline. Fitur ini memastikan bahwa bahkan anggota tim yang memiliki akses ke repository pun tidak bisa melihat nilai rahasia yang tersimpan. Pendekatan keamanan ini merupakan standar industri yang wajib diterapkan di setiap proyek pengembangan perangkat.

// Advertisement

Membuat Workflow File untuk Pipeline Pertama

Saatnya membuat file workflow pertama Anda. Buat file .github/workflows/deploy.yml di dalam repository. File ini mendefinisikan seluruh alur kerja pipeline, mulai dari trigger hingga langkah eksekusi yang akan dijalankan secara otomatis:

name: Pipeline Peluncuran Otomatis

on:
  push:
    branches: [ main ]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - name: Ambil kode dari repository
        uses: actions/checkout@v4

      - name: Setup environment
        uses: actions/setup-node@v4
        with:
          node-version: '20'

      - name: Instal dependensi
        run: npm ci

      - name: Jalankan pengujian
        run: npm test

  kirimkeserver:
    needs: test
    runs-on: ubuntu-latest
    steps:
      - name: Ambil kode dari repository
        uses: actions/checkout@v4

      - name: Kirim kode via SSH
        uses: appleboy/ssh-action@v1.0.0
        with:
          host: ${{ secrets.HOST }}
          username: ${{ secrets.USER }}
          key: ${{ secrets.SSHKEY }}
          port: ${{ secrets.PORT }}
          script: |
            cd /var/www/myapp
            git pull origin main
            npm ci --production
            pm2 restart myapp

Workflow ini menjalankan dua tahap berurutan: pengujian terlebih dahulu, lalu pengiriman ke server hanya jika pengujian berhasil. Kata kunci needs: test memastikan bahwa job pengiriman tidak akan berjalan sebelum job pengujian selesai tanpa error. Pendekatan berurutan ini adalah pola dasar yang harus diterapkan di setiap pipeline produksi.

Contoh Lengkap: Pipeline untuk Aplikasi Laravel

Untuk aplikasi berbasis PHP Laravel, pipeline perlu mengelola instalasi dependensi PHP, menjalankan migrasi basis data, dan mengoptimalkan konfigurasi. Berikut workflow lengkap yang bisa Anda gunakan langsung di proyek Laravel Anda:

name: Pipeline Laravel ke Server

on:
  push:
    branches: [ main ]

jobs:
  pengujian:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Setup PHP 8.3
        uses: shivammathur/setup-php@v2
        with:
          php-version: '8.3'
          extensions: mbstring, dom, zip, gd
      - name: Instal dependensi Composer
        run: composer install --no-dev --prefer-dist
      - name: Salin file konfigurasi
        run: cp .env.example .env
      - name: Generate kunci aplikasi
        run: php artisan key:generate
      - name: Jalankan pengujian unit
        run: php artisan test --parallel

  kirimkeserver:
    needs: pengujian
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Kirim ke Server
        uses: appleboy/ssh-action@v1.0.0
        with:
          host: ${{ secrets.HOST }}
          username: ${{ secrets.USER }}
          key: ${{ secrets.SSHKEY }}
          script: |
            cd /var/www/myapp
            git pull origin main
            composer install --no-dev --optimize-autoloader
            php artisan migrate --force
            php artisan config:cache
            php artisan route:cache
            php artisan view:cache
            sudo systemctl restart laravel-worker

Perhatikan penggunaan --parallel pada perintah pengujian. Kemampuan ini menjalankan beberapa file pengujian secara bersamaan, mempercepat proses secara cepat pada proyek dengan ratusan kasus uji. Pipeline ini juga menjalankan optimasi konfigurasi seperti caching route dan view, yang meningkatkan performa aplikasi di produksi. Pastikan file .env di server sudah dikonfigurasi dengan benar sebelum pipeline pertama kali dijalankan.

Contoh Lengkap: Pipeline untuk Aplikasi dengan Matrix Testing

Dashboard grafik monitoring performa pipeline otomasi pengiriman kode

Matrix testing memungkinkan Anda menguji aplikasi pada beberapa versi runtime secara paralel. Ini sangat berguna untuk memastikan kompatibilitas lintas versi sebelum mengirim kode ke lingkungan produksi. Strategi ini memastikan aplikasi Anda berjalan stabil di berbagai environment:

name: Pipeline Node.js dengan Matrix Testing

on:
  push:
    branches: [ main ]

jobs:
  pengujian:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node-version: [18.x, 20.x, 22.x]
    steps:
      - uses: actions/checkout@v4
      - name: Gunakan Node.js versi matrix
        uses: actions/setup-node@v4
        with:
          node-version: ${{ matrix.node-version }}
      - name: Instal dependensi
        run: npm ci
      - name: Jalankan linting
        run: npm run lint
      - name: Jalankan pengujian
        run: npm test -- --coverage
      - name: Unggah laporan cakupan kode
        if: matrix.node-version == '20.x'
        uses: actions/upload-artifact@v4
        with:
          name: coverage-report
          path: coverage/

  kirimkeserver:
    needs: pengujian
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Kirim ke Server
        uses: appleboy/ssh-action@v1.0.0
        with:
          host: ${{ secrets.HOST }}
          username: ${{ secrets.USER }}
          key: ${{ secrets.SSHKEY }}
          script: |
            cd /var/www/myapp
            git pull origin main
            npm ci --production
            pm2 restart myapp

Strategi matrix menjalankan tiga versi runtime secara bersamaan dalam tiga runner terpisah. Laporan cakupan kode hanya diunggah dari satu versi (Node.js 20.x) untuk menghemat ruang penyimpanan artifacts. Jika salah satu versi gagal, pipeline akan menandai kegagalan tersebut di tab Actions sehingga tim bisa segera mengatasi masalah kompatibilitas. Penggunaan matrix testing adalah investasi kecil yang memberikan dampak besar pada keandalan aplikasi di lingkungan produksi.

Strategi Pengoptimalan dan Keamanan Pipeline

Setelah pipeline dasar berfungsi, langkah selanjutnya adalah mengoptimalkan kecepatan dan meningkatkan keamanan. Berikut beberapa strategi yang terbukti efektif dan bisa diterapkan secara bertahap sesuai kebutuhan proyek Anda.

Manajemen Cache Dependensi

Mengunduh ulang seluruh dependensi di setiap eksekusi pipeline membuang waktu berharga. Penggunaan cache bisa memangkas waktu build hingga lima puluh persen. Ini sangat berpengaruh pada proyek dengan jumlah dependency yang besar:

      - name: Cache node modules
        uses: actions/cache@v4
        with:
          path: ~/.npm
          key: ${{ runner.os }}-node-${{ hashFiles('package-lock.json') }}
          restore-keys: |
            ${{ runner.os }}-node-

Kunci cache dihitung berdasarkan hash file package-lock.json. Ketika file ini tidak berubah, pipeline akan menggunakan cache yang sudah ada daripada mengunduh ulang dari registry. Jika ada perubahan pada dependency, cache akan diperbarui secara otomatis. Strategi ini menghemat waktu dan juga mengurangi beban pada jaringan.

Pemindaian Keamanan Otomatis

Integrasikan pemindaian kerentanan ke dalam pipeline untuk mendeteksi masalah keamanan sejak tahap awal. Trivy adalah salah satu tools gratis yang sangat efektif untuk tujuan ini, dan sudah digunakan oleh ribuan tim pengembang di seluruh dunia:

      - name: Pemindaian kerentanan dengan Trivy
        uses: aquasecurity/trivy-action@master
        with:
          scan-type: 'fs'
          scan-ref: '.'
          format: 'table'
          exit-code: '1'
          severity: 'CRITICAL,HIGH'

Pengaturan exit-code: '1' memastikan pipeline langsung berhenti jika ditemukan kerentanan dengan tingkat CRITICAL atau HIGH. Ini mencegah kode dengan masalah keamanan kritis sampai ke produksi. Anda juga bisa mengintegrasikan Dependabot untuk pemindaian dependensi secara berkala dari menu Settings repository.

Perlindungan Branch Utama

Aktifkan opsi perlindungan branch di GitHub untuk memastikan semua perubahan melalui pull request yang di-review oleh minimal satu anggota tim. Fitur ini bisa diaktifkan di Settings, lalu Branches, lalu tambahkan branch protection rule. Aktifkan opsi berikut untuk menjaga kualitas kode di branch utama:

  • Require a pull request before merging — memaksa semua perubahan melalui pull request yang di-review
  • Require status checks — pipeline harus berhasil sebelum kode bisa digabungkan ke branch utama
  • Require branches updated — kode harus diperbarui sebelum merge
  • Prevent bypass — tidak ada yang boleh melewati aturan ini, termasuk administrator
Layar komputer menampilkan kode program dan terminal untuk pengembangan otomatis

Penggunaan Environment Variables

Pisahkan konfigurasi antara lingkungan staging dan produksi menggunakan environment variables. Ini memudahkan pengelolaan konfigurasi tanpa mengubah kode workflow. Setiap environment bisa memiliki nilai yang berbeda sesuai kebutuhan masing-masing:

jobs:
  kirimkeserver:
    environment: production
    runs-on: ubuntu-latest
    env:
      APPENV: production
      APPDEBUG: false
    steps:
      - uses: actions/checkout@v4
      - name: Kirim ke Server
        uses: appleboy/ssh-action@v1.0.0
        with:
          host: ${{ secrets.HOST }}
          script: |
            cd /var/www/myapp
            export APPENV=production
            export APPDEBUG=false
            git pull origin main
            npm ci --production
            pm2 restart myapp

Dengan pendekatan ini, Anda bisa membuat lingkungan staging yang memiliki konfigurasi berbeda dari produksi tanpa perlu membuat workflow terpisah. Cukup definisikan environment di GitHub dan pipeline akan menggunakan nilai yang sesuai. Fitur environment protection rules juga memungkinkan Anda untuk menambahkan approval manual sebelum eksekusi ke produksi, memberikan lapisan keamanan tambahan yang sangat berguna bagi tim yang lebih besar.

// Advertisement

Pertanyaan yang Sering Diajukan tentang CI/CD dengan Actions

Apakah GitHub Actions gratis untuk repository publik dan privat?

GitHub Actions memberikan akses gratis tanpa batas menit untuk repository publik. Untuk repository privat, Anda mendapat 2.000 menit per bulan secara gratis. Jika melebihi kuota, biaya tambahan dikenakan per menit berdasarkan jenis runner yang digunakan.

Bagaimana cara menjalankan pipeline secara manual tanpa push kode?

Gunakan trigger workflow_dispatch pada file workflow. Setelah dikonfigurasi, Anda bisa menjalankan pipeline dari tab Actions di repository GitHub dengan mengklik tombol Run workflow. Fitur ini sangat berguna untuk pengujian manual atau peluncuran darurat.

Bagaimana jika pipeline gagal di tengah eksekusi?

GitHub akan mengirimkan notifikasi email dan menampilkan log error detail di tab Actions. Anda bisa melihat langkah mana yang gagal, membaca log lengkapnya, dan menjalankan ulang pipeline dari langkah yang gagal tanpa perlu mengulang dari awal.

Berapa lama waktu yang dibutuhkan untuk menjalankan pipeline sederhana?

Untuk proyek sederhana dengan beberapa dependensi, pipeline biasanya selesai dalam 1 sampai 3 menit. Proyek yang lebih besar dengan ratusan dependensi dan pengujian komprehensif mungkin membutuhkan 5 sampai 15 menit. Penggunaan cache dependensi secara konsisten bisa memangkas waktu ini hingga lima puluh persen.

Apakah saya bisa menggunakan Actions untuk repository yang bukan milik saya?

Anda bisa menjalankan workflow di repository yang Anda fork, namun ada beberapa batasan. Workflow yang dipicu oleh event dari repository asli tidak akan berjalan kecuali Anda mengaktifkan opsi Actions di fork tersebut. Untuk repository orang lain, Anda tidak bisa menjalankan workflow tanpa izin akses.

Kesimpulan dan Langkah Selanjutnya

Membangun pipeline CI/CD dengan GitHub Actions merupakan investasi jangka panjang yang memberikan dampak nyata pada produktivitas dan keandalan tim pengembang. Dari persiapan server, konfigurasi rahasia repository, hingga pembuatan workflow yang mencakup pengujian otomatis dan pengiriman ke produksi, setiap langkah yang telah dibahas bisa diterapkan langsung ke proyek Anda.

Mulai dengan pipeline sederhana yang hanya melakukan checkout kode dan menjalankan pengujian. Setelah nyaman, tambahkan tahap pengiriman ke server, caching dependensi, dan pemindaian keamanan secara bertahap. Hindari mencoba menerapkan semuanya sekaligus — pendekatan iteratif memberikan hasil yang lebih baik dan mengurangi risiko kesalahan konfigurasi. Tim yang sukses menerapkan CI/CD biasanya memulai dari satu workflow sederhana, lalu berekspansi seiring bertambahnya kebutuhan proyek.

Jika Anda ingin mempelajari lebih lanjut tentang praktik DevOps lainnya, baca juga panduan kami tentang cara deploy aplikasi Docker ke VPS dan best practices microservices architecture untuk memperluas pemahaman Anda tentang arsitektur perangkat lunak modern.

Sumber Referensi

  1. GitHub Actions Quickstart — Dokumentasi Resmi GitHub
  2. Workflow Syntax — Referensi Sintaks YAML GitHub Actions
  3. DevOps Essentials: CI/CD Pipeline dengan GitHub Actions — Pradha.id
  4. CI/CD Auto Deploy ke VPS Linux — Sufanet
  5. Setup CI/CD Pipeline dengan GitHub Actions — RumahCoding

// Advertisement

V

VyuApp Studio

Bespoke web engineering — Garut, ID