D
Setup

CI/CD

Tiga workflow GitHub Actions yang memicu deploy ke self-hosted runner. Tidak ada CI test — push langsung membangun di server tujuan.

Setiap deploy berjalan di self-hosted runner, bukan ubuntu-latest. Artinya mesin runner adalah server tujuan itu sendiri — tidak ada transfer artifact, build langsung di server produksi.

Tiga workflow

Semua workflow ada di .github/workflows/ dan dipicu oleh push ke branch masing-masing:

WorkflowBranch triggerRunner labelDirektori deploy
deploy_production.ymlv3self-hosted, production${{ vars.PROJECT_DIR }} (repo variable)
deploy_staging.ymlstagingself-hosted, staging/home/dazo-dev-app/htdocs/app.dazo.dev.cicd
deploy_toko_digital.ymltoko_digitalself-hosted, toko_digital/home/deployer/app/dazo.toko-digital

Trigger

yaml
on:
  push:
    branches:
      - v3   # atau staging, atau toko_digital

Tidak ada workflow_dispatch, tidak ada pull_request trigger, tidak ada approval gate. Satu-satunya cara memicu deploy adalah push ke branch tersebut.

Konsekuensinya:

  • Force-push ke v3 langsung mengenai produksi tanpa peringatan
  • Tidak ada dry-run — deploy langsung membangun di server
  • Tidak ada rollback otomatis — untuk rollback, git revert lalu push lagi

Langkah deploy

Ketiga workflow hampir identik. Urutan langkahnya:

1. Checkout code

yaml
- name: Checkout code
  uses: actions/checkout@v3

Mengambil kode commit yang memicu workflow.

2. Clear cache

bash
php artisan cache:clear
php artisan config:clear
php artisan route:clear
php artisan optimize:clear
php artisan config:cache
php artisan view:cache

Bersihkan seluruh cache lalu bangun ulang config dan view. Cache dibangun ulang supaya konfigurasi baru langsung efektif.

3. Pull code (destruktif)

bash
git fetch --all
git reset --hard origin/<branch>

4. Install dependencies

bash
composer install --no-dev --optimize-autoloader --ignore-platform-req=ext-mongodb
npm ci
  • --no-dev — tidak memasang dependensi development
  • --optimize-autoloader — optimalkan autoloader untuk produksi
  • --ignore-platform-req=ext-mongodb — lewati pengecekan ekstensi MongoDB di mesin runner
  • npm ci — pasang dependensi frontend dari package-lock.json (reproducible)

5. Build frontend

bash
npm run build

Staging dan toko_digital menambahkan flag memory:

bash
NODE_OPTIONS="--max-old-space-size=4096" npm run build

Produksi tidak memakai flag ini. Kemungkinan karena runner produksi punya memory lebih besar atau build sudah stabil. Jika build produksi gagal dengan error JavaScript heap out of memory, tambahkan flag yang sama.

6. Fix permissions (produksi & staging saja)

bash
sudo /usr/local/bin/chmod-dazo.sh

Script eksternal di luar repo memperbaiki permission file. Workflow toko_digital tidak menjalankan langkah ini.

Self-hosted runner

Runner bukan GitHub-hosted VM, melainkan mesin fisik/server yang didaftarkan ke GitHub Actions. Keuntungannya: deploy langsung di mesin tujuan, tidak perlu transfer artifact via SSH.

Kelemahannya:

  • Jika runner sedang down, workflow menunggu sampai runner online (tidak ada timeout eksplisit)
  • Tidak ada isolated environment — runner memakai konfigurasi server yang sama
  • sudo tersedia di runner, artinya workflow punya akses root ke server

Yang tidak ada

HalStatus
Test otomatis sebelum deployTidak ada
Build verification lokal sebelum pushTidak ada (tanggung jawab developer)
Lint / code style checkTidak ada
Staging environment sebagai gate wajibTidak ada — bisa push langsung ke v3
Approval gateTidak ada
Rollback otomatisTidak ada
Notifikasi setelah deployTidak ada (cek manual di tab Actions)
Cache dependency antar runTidak ada

Monitoring deploy

  1. Buka https://github.com/dazodevops/dazoapp/actions
  2. Cari run terbaru untuk workflow yang sesuai
  3. Status hijau ≠ aplikasi sehat — hanya berarti langkah build selesai
  4. Setelah deploy, verifikasi manual:
    • Buka app.dazo.id — pastikan halaman login muncul
    • Cek storage/logs/laravel.log — cari error 500
    • Test satu endpoint API
    • Cek php artisan schedule:list

Risiko dan mitigasi

Mitigasi yang dianjurkan (sebelum push ke v3):

  • npm run build lolos lokal
  • php artisan test lolos (walau minim)
  • Tidak ada console.log / dd() / var_dump() di diff
  • Tidak ada perubahan di config/jwt.php atau JWT_SECRET tanpa koordinasi lintas repo
  • Tidak ada perubahan URL service tanpa koordinasi lintas repo

Lihat juga