CI/CD Deployment
CI/CD adalah praktik mengotomatiskan build, pengujian, dan rilis. Setiap perubahan di repository memicu pipeline: kode diperiksa, dependensi dipasang, tes dijalankan, artefak dibangun, lalu dikirim ke server. Tujuannya mengurangi langkah manual dan membuat rilis lebih konsisten.
Tahapan pipeline
Pipeline yang sehat dimulai dari checkout branch yang benar, install dependensi dari lockfile, lint dan test, lalu build artefak atau image Docker. Setelah itu deploy ke staging dan jalankan smoke test. Kalau lolos, promote ke produksi dengan persetujuan atau jadwal. Terakhir, health check dan rollback kalau gagal.
Tes yang cepat lebih berguna daripada pipeline panjang yang jarang dijalankan. Mulai dari lint, unit test, dan build. Tambahkan staging dan rollback setelah alur dasar stabil.
Contoh GitHub Actions
name: deploy
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 22
cache: npm
- run: npm ci
- run: npm test -- --run
- run: npm run build
- name: Deploy
env:
SSH_KEY: ${{ secrets.SSH_KEY }}
SSH_KNOWN_HOSTS: ${{ secrets.SSH_KNOWN_HOSTS }}
run: |
install -m 600 /dev/stdin ~/.ssh/id_ed25519 <<< "$SSH_KEY"
printf '%s\n' "$SSH_KNOWN_HOSTS" >> ~/.ssh/known_hosts
rsync -az --delete .next/ ${{ secrets.USER }}@${{ secrets.HOST }}:/var/www/app/.next-new/
ssh ${{ secrets.USER }}@${{ secrets.HOST }} 'cd /var/www/app && mv .next .next-old && mv .next-new .next && pm2 restart app'
Contoh ini sederhana. Produksi nyata sebaiknya memakai artefak yang tidak berubah, health check, dan rollback otomatis. Jangan menyimpan private key di repository. Gunakan secret manager. Simpan host key di secret SSH_KNOWN_HOSTS dan verifikasi fingerprint-nya. Jangan hanya menjalankan ssh-keyscan saat deploy karena itu mempercayai host key apa pun yang menjawab.
Deploy atomik dan rollback
Alih-alih menimpa folder aplikasi, deploy ke direktori baru lalu ganti symlink dengan ln -sfn /var/www/releases/2026-10-30 /var/www/current. Kalau health check gagal, kembalikan symlink ke rilis sebelumnya.
Untuk Docker, jalankan image dengan tag versi dan simpan image lama sampai rilis baru stabil. Untuk database, siapkan migrasi yang kompatibel mundur dan backup sebelum perubahan besar.
Rahasia dan akses
Gunakan secret terenkripsi, bukan variabel yang tercetak di log. Batasi kunci SSH ke perintah dan host yang diperlukan. Gunakan user deploy khusus, bukan root. Pisahkan akses staging dan produksi, dan putar kredensial kalau log atau artefak bocor.
Yang sering salah
Deploy otomatis tanpa tes hanya menyebarkan bug lebih cepat. Migrasi database tanpa rencana rollback bisa tidak kompatibel dengan versi lama. Tidak ada health check membuat deploy dianggap sukses meskipun aplikasi error.
Menyimpan .env di artefak juga menyebar rahasia ke banyak tempat. Uji dari staging karena lingkungan produksi berbeda. CI/CD berkaitan dengan staging, SSH, Docker, dan Snapshot VPS.
FAQ
Apakah CI/CD hanya untuk tim besar?
Tidak. Proyek kecil juga mendapat manfaat dari tes otomatis dan deploy yang konsisten. Mulai dari pipeline sederhana, lalu tambahkan staging dan rollback.
Apakah deploy otomatis aman untuk produksi?
Aman kalau ada tes, health check, izin, dan rollback. Untuk perubahan berisiko, gunakan persetujuan manual atau jadwal deploy.
Bagaimana menangani migrasi database?
Buat migrasi yang kompatibel mundur, backup sebelum eksekusi, uji di staging, dan siapkan rencana rollback. Jangan menjalankan migrasi destruktif bersamaan dengan deploy kode.
Disclaimer: Artikel WikiHosting disusun untuk tujuan edukasi dan referensi. Teknologi hosting terus berkembang, sehingga beberapa informasi teknis mungkin berubah seiring waktu.
