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_keyunddev_secreterhalten
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}}.
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')"'"
}
}
}'
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 UmgebungsvariableTZ, 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')"'"
}
}
}'
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')"'"
}
}
}'
Ü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')"'"
}
}
}'
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
- 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. - Telefonnummern müssen die Ländervorwahl enthalten. Eine Nummer aus Singapur sollte beispielsweise als
+6591234567geschrieben werden. Ein Versand ohne+oder Ländervorwahl führt zu einem Fehler. - 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. - Eine HTTP-200-Antwort der API bedeutet nicht, dass die SMS erfolgreich zugestellt wurde. Bitte überprüfen Sie das Feld
codeim Antwortkörper. Wenncode0oder nicht vorhanden ist, ist alles in Ordnung; wenn es ungleich null ist, finden Sie in der Fehlercode-Erläuterung Hinweise zur Fehlerbehebung. - Vermeiden Sie das Preisgeben von Schlüsseln in Logs. Geben Sie den Inhalt der Variable
AUTHimrun-Schritt nicht direkt mitechoaus.










