Logo Site EngageLab Mark Colored TransparentDokumentation
Suchen

Github

Im CI/CD-Prozess müssen wichtige Ereignisse wie Build-Fehler, abgeschlossene Bereitstellungen und Sicherheitsscan-Warnungen oft sofort an die zuständigen Personen gemeldet werden. Durch die Integration von EngageLab SMS in GitHub Actions können Sie an jedem Knotenpunkt des Workflows SMS-Benachrichtigungen auslösen und so sicherstellen, dass Teammitglieder unabhängig davon, ob sie online sind, umgehend über den Systemstatus informiert werden.

Voraussetzungen

Bevor Sie beginnen, stellen Sie bitte sicher, dass die folgenden Konfigurationen abgeschlossen sind:

Auf der EngageLab-Seite

  • Der EngageLab SMS Dienst ist aktiviert
  • SMS-Vorlagen wurden auf der Seite Vorlagenverwaltung erstellt und genehmigt und Vorlagen-IDs erhalten
  • API Keys wurden auf der Seite API Key erstellt und dev_key und dev_secret erhalten

Auf der GitHub-Seite

  • Sie verfügen über Administratorrechte für das Ziel-Repository, um Repository Secrets zu konfigurieren

Schritt 1: SMS-Vorlagen vorbereiten

Der Aufruf der API zum Senden von SMS erfordert vorab genehmigte Vorlagen; das direkte Übergeben von benutzerdefiniertem Text wird nicht unterstützt.

Melden Sie sich bei der EngageLab Konsole an, gehen Sie zu SMS → Vorlagenverwaltung und erstellen Sie eine neue Vorlage. Am Beispiel einer Bereitstellungsbenachrichtigung könnte der Vorlageninhalt wie folgt gestaltet werden:

【{{sign}}】Hello, the repository {{repo}} was {{status}} at {{time}}, Commit: {{commit}}.
              
              {{sign}}】Hello, the repository {{repo}} was {{status}} at {{time}}, Commit: {{commit}}.

            
Diesen Codeblock im schwebenden Fenster anzeigen

Warten Sie nach dem Einreichen der Vorlage auf die Genehmigung und notieren Sie sich die Vorlagen-ID (z. B. deploy-notify-template).

Empfehlung: Das Erstellen unabhängiger Vorlagen für „Bereitstellung erfolgreich“ und „Bereitstellung fehlgeschlagen“ sorgt für klarere Semantik und höhere Genehmigungsraten.

Schritt 2: GitHub Secrets konfigurieren

Um zu vermeiden, dass Schlüssel fest in Workflow-Dateien codiert werden, sollten sensible Informationen in GitHub Repository Secrets gespeichert werden.

Gehen Sie zur Repository-Seite, navigieren Sie zu Settings → Secrets and variables → Actions → New repository secret und fügen Sie die folgenden Variablen nacheinander hinzu:

Secret-Name Beschreibung
ENGAGELAB_DEV_KEY Der dev_key von der EngageLab API-Key-Seite
ENGAGELAB_DEV_SECRET Der entsprechende dev_secret
ENGAGELAB_TEMPLATE_SUCCESS Vorlagen-ID für Benachrichtigungen über erfolgreiche Bereitstellungen
ENGAGELAB_TEMPLATE_FAILURE Vorlagen-ID für Benachrichtigungen über fehlgeschlagene Bereitstellungen
ON_CALL_PHONE Die Mobilnummer, die Benachrichtigungen erhalten soll, einschließlich Ländervorwahl, z. B. +6591234567

Schritt 3: Benachrichtigungsschritte im Workflow hinzufügen

Die EngageLab SMS API verwendet HTTP-Basic-Authentifizierung, und der Authentifizierungsstring wird durch base64(dev_key:dev_secret) generiert. Nachfolgend finden Sie ein vollständiges Workflow-Beispiel:

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

            
Diesen Codeblock im schwebenden Fenster anzeigen

Erläuterung der wichtigsten Parameter

Parameter Beschreibung
if: success() Wird nur ausgeführt, wenn alle vorherigen Schritte im aktuellen Job erfolgreich waren
if: failure() Wird nur ausgeführt, wenn ein Schritt im aktuellen Job fehlschlägt
github.repository Integrierte GitHub-Variable, formatiert als owner/repo
github.sha Der Commit-SHA, der diesen Workflow ausgelöst hat
date '+%Y-%m-%d %H:%M' Ruft die aktuelle Zeit des Runners ab, standardmäßig UTC

Hinweis: Der date-Befehl ruft die Systemzeit (UTC) des GitHub Actions Runners ab. Wenn Sie die Ortszeit anzeigen müssen, setzen Sie vor dem Befehl die Umgebungsvariable TZ, zum Beispiel: TZ='Asia/Shanghai' date '+%Y-%m-%d %H:%M'.

Erweiterte Szenarien

Mehrere Empfänger benachrichtigen

Ändern Sie das Feld to in ein Array, um gleichzeitig an mehrere Telefonnummern zu senden:

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

            
Diesen Codeblock im schwebenden Fenster anzeigen

Sicherheitsscan-Warnungen

Benachrichtigen Sie in einem Workflow, der Sicherheitsscan-Schritte enthält, sofort, wenn eine Schwachstelle mit hohem Risiko gefunden wird:

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

            
Diesen Codeblock im schwebenden Fenster anzeigen

Übermittlung der Ausführungsergebnisse geplanter Aufgaben

Senden Sie für geplante Workflows, die über schedule ausgelöst werden (z. B. tägliche Datensynchronisierung, regelmäßige Backups), nach der Ausführung eine Zusammenfassungs-SMS:

on: schedule: - cron: '0 2 * * *' # Execute 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 * * *'   # Execute 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')"'"
                }
              }
            }'

            
Diesen Codeblock im schwebenden Fenster anzeigen

if: always() bedeutet, dass die Ausführung unabhängig davon erfolgt, ob die Schritte erfolgreich sind oder fehlschlagen, geeignet für Szenarien, in denen die Zustellung der Benachrichtigung garantiert sein muss.

Hinweise

  1. Vorlagen müssen vor der Verwendung genehmigt werden. Wenn eine Vorlage beim Aufruf in Prüfung oder abgelehnt ist, gibt die API einen 4001-Fehler zurück.
  2. Telefonnummern müssen die Ländervorwahl enthalten. Eine Nummer aus Singapur sollte beispielsweise als +6591234567 geschrieben werden. Ein Versand ohne + oder Ländervorwahl führt zu einem Fehler.
  3. Der Authentifizierungsstring wird bei jeder Anfrage dynamisch generiert. Es ist nicht nötig, das Base64-kodierte Ergebnis vorab zu speichern; berechnen Sie es einfach in Echtzeit mit echo -n "key:secret" | base64.
  4. Eine HTTP-200-Antwort der API bedeutet nicht, dass die SMS erfolgreich zugestellt wurde. Bitte überprüfen Sie das Feld code im Antwortkörper. Wenn code 0 oder nicht vorhanden ist, ist alles in Ordnung; wenn es ungleich null ist, finden Sie in der Fehlercode-Erläuterung Hinweise zur Fehlerbehebung.
  5. Vermeiden Sie das Preisgeben von Schlüsseln in Logs. Geben Sie den Inhalt der Variable AUTH im run-Schritt nicht direkt mit echo aus.
Icon Solid Transparent White Qiyu
Vertrieb kontaktieren