Pendahuluan
Untuk memastikan rilis bisa dilakukan secara cepat namun tetap aman, workflow GitHub Actions perlu menerapkan validasi dependency, build dan unit test, lalu smoke test ke staging sebelum release. Artikel ini langsung menunjukkan bagaimana merangkai workflow yang membarengi setiap tahap itu, menangkap kegagalan, serta menyediakan opsi rollback dan gate manual.
Anda akan melihat contoh YAML, strategi caching, cara memicu release otomatis dan manual, serta mekanisme notifikasi agar tim dev bisa mempercepat rilis tanpa mengorbankan kualitas.
Komponen Workflow Release Otomatis
1. Validasi Dependency
Langkah pertama adalah memastikan dependency tidak mengandung kerentanan atau lisensi yang tidak diizinkan. Untuk proyek JavaScript/PHP, kita bisa menjalankan npm audit/composer audit dan memeriksa lisensi pakai skrip sederhana.
Pada contoh workflow berikut, job dependency-check menjalankan audit dan lisensi. Jika audit gagal, job akan berhenti sehingga release tidak dilanjutkan.
name: Release Otomatis
on:
workflow_dispatch:
push:
tags:
- 'v*'
jobs:
dependency-check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install dependencies
run: npm ci
- name: Audit dependencies
run: npm audit --audit-level=moderate
- name: Validasi lisensi
run: npx license-checker --production --summaryJika paket audit/lisensi tidak ada, Anda dapat menggantinya dengan alat lain, misalnya npm audit diganti yarn audit sesuai manajer paket.
2. Build dan Unit Test
Job berikutnya harus memastikan build berhasil dan unit test dijalankan. Gunakan caching dependency untuk mempercepat proses:
build-test:
needs: dependency-check
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: '18'
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Build aplikasi
run: npm run build
- name: Jalankan unit test
run: npm testPenggunaan actions/setup-node dengan cache: 'npm' otomatis menyimpan folder ~/.npm dan node_modules sehingga waktu install menurun drastis.
3. Smoke Test terhadap Staging
Setelah build dan test berhasil, deploy ke staging untuk smoke test. Pastikan smoke test memanggil endpoint penting dan menolak rilis jika respon tidak sesuai.
smoke-test:
needs: build-test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Deploy ke staging (simulasi)
run: ./scripts/deploy-staging.sh
- name: Smoke test
run: curl -f https://staging.example.com/health || exit 1Kegagalan curl otomatis menghentikan workflow dengan exit code 1 sehingga release tidak dilanjutkan.
Mekanisme Deteksi Kegagalan dan Rollback
GitHub Actions menghentikan workflow saat job gagal, tetapi pada lingkungan nyata Anda perlu rollback otomatis. Tambahkan job terpisah:
rollback:
needs: smoke-test
if: failure()
runs-on: ubuntu-latest
steps:
- name: Jalankan rollback ke versi sebelumnya
run: ./scripts/rollback.shKondisi if: failure() memastikan rollback hanya dijalankan bila salah satu job sebelumnya gagal. Pastikan skrip rollback dapat mempromosikan artefak release sebelumnya atau memanggil ulang skrip deploy versi stabil.
Gate Manual dan Notifikasi
Untuk release yang butuh konfirmasi manusia, tambahkan job dengan workflow_dispatch atau job manual approval menggunakan environment GitHub:
manual-gate:
needs: smoke-test
runs-on: ubuntu-latest
environment:
name: production
url: https://production.example.com
steps:
- name: Konfirmasi manual
run: echo "Tunggu approval dari tim sebelum lanjut"Lingkungan dengan proteksi menyertakan tombol "Review deployment" di UI GitHub yang memaksa tim melakukan verifikasi sebelum job selanjutnya dijalankan.
Untuk notifikasi, gunakan action seperti actions/github-script atau integrasi Slack/Teams setelah job berhasil atau gagal. Contoh:
notify:
needs: [rollback, smoke-test]
runs-on: ubuntu-latest
steps:
- name: Kirim notifikasi
uses: 8398a7/action-slack@v3
with:
status: ${{ job.status }}
fields: repo,commit
Trigger Release: Otomatis dan Manual
Workflow di atas dipicu dua cara: push tag v* untuk release otomatis, dan workflow_dispatch agar developer bisa menjalankan manual. Dengan push tag, pipeline dijalankan langsung setelah versi baru dibuat.
Untuk manual, buka tab "Actions" di repo, pilih workflow, lalu klik "Run workflow". Ini cocok untuk release eksperimental atau hotfix.
Tips Praktis
- Strategi caching: gunakan action bawaan (setup-node dengan
cache: 'npm'atauactions/cacheuntuk Composer) dan validasi hashpackage-lock.json/composer.lock. - Debug: sertakan
envdebug (misalnyaDEBUG=1) dalam job yang bermasalah, serta set langkahif: always()untuk tindakan pembersihan/log. - Trade-off: smoke test staging menambah durasi, tetapi mencegah rollback mahal di production. Gunakan fitur cancel-in-progress untuk membatalkan run lama.
Kesimpulan
Workflow GitHub Actions yang membentang dari validasi dependency, build/unit test, smoke test, hingga gate manual memungkinkan release otomatis yang tetap aman. Tambahkan rollback otomatis, notifikasi, dan caching agar proses terukur dan dapat diandalkan.
Dengan pendekatan ini, tim dev dapat mempercepat rilis, tetapi tetap memastikan dependensi bebas bahaya, ujicoba sudah lengkap, dan staging sudah terverifikasi sebelum versi baru diluncurkan.
Komentar
0 komentar
Masuk ke akun kamu untuk ikut berkomentar.
Belum ada komentar
Jadilah yang pertama ikut berdiskusi!