GitHub
Dans les flux CI/CD, les événements critiques tels qu’échecs de build, fin de déploiement et alertes d’analyse de sécurité doivent souvent être communiqués immédiatement aux membres concernés de l’équipe. En intégrant EngageLab SMS dans GitHub Actions, vous pouvez déclencher des notifications SMS à n’importe quelle étape d’un workflow, afin que l’équipe reste informée de l’état du système qu’elle soit en ligne ou non.
Prérequis
Avant de commencer, assurez-vous que les configurations suivantes sont en place :
Côté EngageLab
- Le service SMS EngageLab est activé
- Un modèle SMS a été créé et approuvé sur la page Gestion des modèles ; l’ID du modèle a été obtenu
- Une clé API a été créée sur la page Clés API ;
dev_keyetdev_secretont été obtenus
Côté GitHub
- Vous disposez des droits d’administration sur le dépôt cible et pouvez configurer les secrets du dépôt
Étape 1 : Préparer les modèles SMS
L’envoi de SMS via l’API nécessite des modèles préapprouvés ; le texte personnalisé ne peut pas être envoyé directement.
Connectez-vous à la console EngageLab, allez dans SMS → Gestion des modèles, et créez un nouveau modèle. Pour un exemple de notification de déploiement, le contenu du modèle peut ressembler à :
【{{sign}}】Hello, repository {{repo}} {{status}} at {{time}}, Commit: {{commit}}.
Après soumission du modèle, attendez l’approbation et notez l’ID du modèle (ex. deploy-notify-template).
Astuce : Créez des modèles distincts pour « déploiement réussi » et « échec du déploiement » — l’intention est plus claire et le taux d’approbation s’en trouve amélioré.
Étape 2 : Configurer les secrets GitHub
Pour éviter de coder en dur les secrets dans les fichiers de workflow, stockez les informations sensibles dans les secrets du dépôt GitHub.
Sur la page du dépôt, allez dans Paramètres → Secrets et variables → Actions → Nouveau secret de dépôt, et ajoutez les variables suivantes une par une :
| Nom du secret | Description |
|---|---|
ENGAGELAB_DEV_KEY |
dev_key depuis la page Clés API EngageLab |
ENGAGELAB_DEV_SECRET |
dev_secret correspondant |
ENGAGELAB_TEMPLATE_SUCCESS |
ID du modèle pour les notifications de déploiement réussi |
ENGAGELAB_TEMPLATE_FAILURE |
ID du modèle pour les notifications d’échec de déploiement |
ON_CALL_PHONE |
Numéro de téléphone pour les notifications, avec indicatif pays, ex. +8618701235678 |
Étape 3 : Ajouter les étapes de notification au workflow
L’API SMS EngageLab utilise l’authentification HTTP Basic ; la chaîne d’auth est générée par base64(dev_key:dev_secret). Voici un exemple complet de workflow :
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')"'"
}
}
}'
Référence des paramètres clés
| Paramètre | Description |
|---|---|
if: success() |
S’exécute uniquement lorsque toutes les étapes précédentes du job en cours ont réussi |
if: failure() |
S’exécute uniquement lorsqu’une étape du job en cours a échoué |
github.repository |
Variable GitHub intégrée, au format owner/repo |
github.sha |
SHA du commit qui a déclenché ce workflow |
date '+%Y-%m-%d %H:%M' |
Obtient l’heure actuelle sur le runner, fuseau UTC par défaut |
Remarque : La commande
daterenvoie l’heure système du runner GitHub Actions (UTC). Pour afficher un fuseau local, définissez la variable d’environnementTZavant la commande, ex. :TZ='Asia/Shanghai' date '+%Y-%m-%d %H:%M'.
Scénarios étendus
Avertir plusieurs destinataires
Modifiez le champ to en tableau pour envoyer simultanément à plusieurs numéros :
-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')"'"
}
}
}'
Alertes d’analyse de sécurité
Dans les workflows incluant des étapes d’analyse de sécurité, envoyez des notifications immédiates lorsque des vulnérabilités de gravité élevée sont détectées :
- 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')"'"
}
}
}'
Rapports de résultats pour tâches planifiées
Pour les workflows déclenchés par schedule (synchronisations quotidiennes, sauvegardes périodiques, etc.), envoyez un SMS récapitulatif après exécution :
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()signifie que l’étape s’exécute que les étapes précédentes réussissent ou échouent — adapté aux cas où la notification doit toujours être envoyée.
Points importants
- Les modèles doivent être approuvés avant utilisation. Si un modèle est en attente d’examen ou rejeté lors de l’appel, l’API renvoie une erreur
4001. - Les numéros doivent inclure l’indicatif pays, ex. pour la Chine continentale
+8618701235678. Omettre+ou l’indicatif provoque un échec de livraison. - La chaîne d’authentification est générée dynamiquement à chaque requête — inutile de stocker le résultat encodé en Base64 à l’avance. Calculez-le à la volée avec
echo -n "key:secret" | base64. - Une réponse HTTP 200 de l’API ne garantit pas la livraison du SMS — vérifiez le champ
codedans le corps de la réponse. Uncodeégal à0ou absent indique le succès ; pour les valeurs non nulles, consultez la documentation des codes d’erreur pour le diagnostic. - Évitez les fuites de secrets dans les journaux — n’affichez pas directement le contenu de la variable
AUTHavecechodans les étapesrun.
