Logo Site EngageLab Mark Colored TransparentDokumen
Cari

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_key dan dev_secret telah 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}}.
              
              {{sign}}】Hello, repository {{repo}} {{status}} at {{time}}, Commit: {{commit}}.

            
Tampilkan blok kode ini di jendela mengambang

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')"'" } } }'
              
              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')"'"
                }
              }
            }'

            
Tampilkan blok kode ini di jendela mengambang

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 date mengembalikan waktu sistem GitHub Actions Runner (UTC). Untuk menampilkan zona waktu lokal, atur variabel lingkungan TZ sebelum 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')"'" } } }'
              
              -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')"'"
    }
  }
}'

            
Tampilkan blok kode ini di jendela mengambang

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')"'" } } }'
              
              - 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')"'"
          }
        }
      }'

            
Tampilkan blok kode ini di jendela mengambang

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')"'" } } }'
              
              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')"'"
                }
              }
            }'

            
Tampilkan blok kode ini di jendela mengambang

if: always() berarti langkah dijalankan terlepas dari sukses atau gagalnya langkah sebelumnya — cocok jika notifikasi harus selalu terkirim.

Catatan Penting

  1. Template harus disetujui sebelum dipakai. Jika template masih ditinjau atau ditolak saat dipanggil, API akan mengembalikan kesalahan 4001.
  2. Nomor telepon harus menyertakan kode negara, mis. nomor Tiongkok daratan ditulis +8618701235678. Mengabaikan + atau kode negara akan menyebabkan pengiriman gagal.
  3. 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.
  4. Respons HTTP 200 dari API tidak menjamin pengiriman SMS berhasil — periksa bidang code dalam body respons. code bernilai 0 atau tidak ada menandakan sukses; untuk nilai bukan nol, lihat dokumentasi kode kesalahan untuk pemecahan masalah.
  5. Hindari kebocoran rahasia di log — jangan echo isi variabel AUTH langsung di langkah run.
Icon Solid Transparent White Qiyu
Hubungi Sales