GitHub
Dalam alur CI/CD, peristiwa penting seperti kegagalan build, penyelesaian deployment, dan peringatan pemindaian keamanan sering perlu segera dikomunikasikan ke anggota tim terkait. Dengan mengintegrasikan SMS EngageLab ke GitHub Actions, Anda dapat memicu notifikasi SMS di titik mana pun dalam Workflow, sehingga anggota tim tetap mengetahui status sistem baik sedang daring maupun tidak.
Prasyarat
Sebelum memulai, pastikan konfigurasi berikut telah selesai:
Sisi EngageLab
- Layanan SMS EngageLab telah diaktifkan
- Template SMS telah dibuat dan disetujui di halaman Manajemen Template; ID template telah diperoleh
- Kunci API telah dibuat di halaman Kunci API;
dev_keydandev_secrettelah diperoleh
Sisi GitHub
- Anda memiliki akses admin ke repositori target dan dapat mengonfigurasi Repository Secrets
Langkah 1: Siapkan Template SMS
Pengiriman SMS melalui API memerlukan template yang telah disetujui; konten teks kustom tidak dapat dikirim langsung.
Masuk ke konsol EngageLab, buka SMS → Template Management, dan buat template baru. Untuk contoh notifikasi deployment, isi template bisa seperti:
【{{sign}}】Hello, repository {{repo}} {{status}} at {{time}}, Commit: {{commit}}.
Setelah template dikirim, tunggu persetujuan dan catat ID template (mis. deploy-notify-template).
Tips: Buat template terpisah untuk "deployment berhasil" dan "deployment gagal" — maksudnya lebih jelas dan tingkat persetujuan lebih baik.
Langkah 2: Konfigurasi GitHub Secrets
Untuk menghindari hardcode rahasia di berkas Workflow, simpan informasi sensitif di GitHub Repository Secrets.
Buka halaman repositori Anda, lalu Settings → Secrets and variables → Actions → New repository secret, dan tambahkan variabel berikut satu per satu:
| Nama Secret | Deskripsi |
|---|---|
ENGAGELAB_DEV_KEY |
dev_key dari halaman Kunci API EngageLab |
ENGAGELAB_DEV_SECRET |
dev_secret yang sesuai |
ENGAGELAB_TEMPLATE_SUCCESS |
ID template untuk notifikasi deployment sukses |
ENGAGELAB_TEMPLATE_FAILURE |
ID template untuk notifikasi deployment gagal |
ON_CALL_PHONE |
Nomor telepon penerima notifikasi, harus menyertakan kode negara, mis. +8618701235678 |
Langkah 3: Tambahkan Langkah Notifikasi ke Workflow
API SMS EngageLab memakai autentikasi HTTP Basic, dengan string auth dibuat oleh base64(dev_key:dev_secret). Di bawah ini contoh Workflow lengkap:
name: Deploy to Production
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Build and test
run: |
npm install
npm test
- name: Deploy
run: ./deploy.sh
- name: Notify success via EngageLab SMS
if: success()
run: |
AUTH=$(echo -n "${{ secrets.ENGAGELAB_DEV_KEY }}:${{ secrets.ENGAGELAB_DEV_SECRET }}" | base64)
curl -s -X POST https://smsapi.engagelab.com/v1/messages \
-H "Content-Type: application/json" \
-H "Authorization: Basic ${AUTH}" \
-d '{
"to": ["${{ secrets.ON_CALL_PHONE }}"],
"template": {
"id": "${{ secrets.ENGAGELAB_TEMPLATE_SUCCESS }}",
"params": {
"repo": "${{ github.repository }}",
"commit": "${{ github.sha }}",
"status": "deployed successfully",
"time": "'"$(date '+%Y-%m-%d %H:%M')"'"
}
}
}'
- name: Notify failure via EngageLab SMS
if: failure()
run: |
AUTH=$(echo -n "${{ secrets.ENGAGELAB_DEV_KEY }}:${{ secrets.ENGAGELAB_DEV_SECRET }}" | base64)
curl -s -X POST https://smsapi.engagelab.com/v1/messages \
-H "Content-Type: application/json" \
-H "Authorization: Basic ${AUTH}" \
-d '{
"to": ["${{ secrets.ON_CALL_PHONE }}"],
"template": {
"id": "${{ secrets.ENGAGELAB_TEMPLATE_FAILURE }}",
"params": {
"repo": "${{ github.repository }}",
"commit": "${{ github.sha }}",
"status": "deployment failed",
"time": "'"$(date '+%Y-%m-%d %H:%M')"'"
}
}
}'
Referensi Parameter Penting
| Parameter | Deskripsi |
|---|---|
if: success() |
Hanya dijalankan jika semua langkah sebelumnya di Job saat ini berhasil |
if: failure() |
Hanya dijalankan jika ada langkah di Job saat ini yang gagal |
github.repository |
Variabel bawaan GitHub, format owner/repo |
github.sha |
Commit SHA yang memicu Workflow ini |
date '+%Y-%m-%d %H:%M' |
Mendapat waktu saat ini di Runner, default zona waktu UTC |
Catatan: Perintah
datemengembalikan waktu sistem GitHub Actions Runner (UTC). Untuk menampilkan zona waktu lokal, atur variabel lingkunganTZsebelum perintah, mis.:TZ='Asia/Shanghai' date '+%Y-%m-%d %H:%M'.
Skenario Lanjutan
Beri Tahu Beberapa Penerima
Ubah bidang to menjadi array untuk mengirim ke beberapa nomor sekaligus:
-d '{
"to": [
"${{ secrets.ON_CALL_PHONE }}",
"${{ secrets.TEAM_LEAD_PHONE }}"
],
"template": {
"id": "${{ secrets.ENGAGELAB_TEMPLATE_FAILURE }}",
"params": {
"repo": "${{ github.repository }}",
"commit": "${{ github.sha }}",
"status": "deployment failed",
"time": "'"$(date '+%Y-%m-%d %H:%M')"'"
}
}
}'
Peringatan Pemindaian Keamanan
Dalam Workflow yang menyertakan langkah pemindaian keamanan, kirim notifikasi segera ketika kerentanan tingkat tinggi ditemukan:
- name: Security scan
id: security
run: ./run-security-scan.sh
- name: Notify security alert via SMS
if: steps.security.outputs.high_severity == 'true'
run: |
AUTH=$(echo -n "${{ secrets.ENGAGELAB_DEV_KEY }}:${{ secrets.ENGAGELAB_DEV_SECRET }}" | base64)
curl -s -X POST https://smsapi.engagelab.com/v1/messages \
-H "Content-Type: application/json" \
-H "Authorization: Basic ${AUTH}" \
-d '{
"to": ["${{ secrets.SECURITY_TEAM_PHONE }}"],
"template": {
"id": "${{ secrets.ENGAGELAB_TEMPLATE_SECURITY }}",
"params": {
"repo": "${{ github.repository }}",
"time": "'"$(date '+%Y-%m-%d %H:%M')"'"
}
}
}'
Laporan Hasil Tugas Terjadwal
Untuk Workflow yang dipicu oleh schedule (mis. sinkronisasi data harian atau cadangan berkala), kirim ringkasan SMS setelah eksekusi:
on:
schedule:
- cron: '0 2 * * *' # Runs daily at 02:00 UTC
jobs:
daily-sync:
runs-on: ubuntu-latest
steps:
- name: Run daily sync
run: ./daily-sync.sh
- name: Notify result via SMS
if: always()
run: |
STATUS=${{ job.status }}
AUTH=$(echo -n "${{ secrets.ENGAGELAB_DEV_KEY }}:${{ secrets.ENGAGELAB_DEV_SECRET }}" | base64)
curl -s -X POST https://smsapi.engagelab.com/v1/messages \
-H "Content-Type: application/json" \
-H "Authorization: Basic ${AUTH}" \
-d '{
"to": ["${{ secrets.ON_CALL_PHONE }}"],
"template": {
"id": "${{ secrets.ENGAGELAB_TEMPLATE_DAILY }}",
"params": {
"repo": "${{ github.repository }}",
"status": "'"${STATUS}"'",
"time": "'"$(TZ='Asia/Shanghai' date '+%Y-%m-%d %H:%M')"'"
}
}
}'
if: always()berarti langkah dijalankan terlepas dari sukses atau gagalnya langkah sebelumnya — cocok jika notifikasi harus selalu terkirim.
Catatan Penting
- Template harus disetujui sebelum dipakai. Jika template masih ditinjau atau ditolak saat dipanggil, API akan mengembalikan kesalahan
4001. - Nomor telepon harus menyertakan kode negara, mis. nomor Tiongkok daratan ditulis
+8618701235678. Mengabaikan+atau kode negara akan menyebabkan pengiriman gagal. - String auth dihasilkan secara dinamis untuk setiap permintaan — tidak perlu menyimpan hasil Base64 terlebih dahulu. Cukup hitung secara real time dengan
echo -n "key:secret" | base64. - Respons HTTP 200 dari API tidak menjamin pengiriman SMS berhasil — periksa bidang
codedalam body respons.codebernilai0atau tidak ada menandakan sukses; untuk nilai bukan nol, lihat dokumentasi kode kesalahan untuk pemecahan masalah. - Hindari kebocoran rahasia di log — jangan
echoisi variabelAUTHlangsung di langkahrun.
