Github
Dans un pipeline CI/CD, des événements clés comme un échec de build, la fin d'un déploiement ou une alerte d'analyse de sécurité doivent souvent être notifiés immédiatement aux personnes concernées. En intégrant EngageLab SMS à GitHub Actions, vous pouvez déclencher des notifications SMS à n'importe quelle étape du Workflow, garantissant que les membres de l'équipe soient informés à temps de l'état du système, qu'ils soient connectés ou non.
Prérequis
Avant de commencer, assurez-vous que les configurations suivantes sont terminées :
Côté EngageLab
- Le service EngageLab SMS est activé
- Des modèles SMS ont été créés et validés sur la page de gestion des modèles, et les ID de modèle ont été obtenus
- Une clé API a été créée sur la page des clés API, et les
dev_keyetdev_secretont été obtenus
Côté GitHub
- Vous disposez des droits d'administrateur sur le dépôt cible afin de configurer les Repository Secrets
Étape 1 : Préparer les modèles SMS
L'appel de l'API pour envoyer des SMS nécessite des modèles pré-validés ; la transmission directe de texte personnalisé n'est pas prise en charge.
Connectez-vous à la console EngageLab, accédez à SMS → Gestion des modèles et créez un nouveau modèle. En prenant l'exemple d'une notification de déploiement, le contenu du modèle peut être conçu ainsi :
【{{sign}}】Bonjour, le dépôt {{repo}} a été {{status}} le {{time}}, Commit : {{commit}}.
Après avoir soumis le modèle, attendez sa validation et notez l'ID de modèle (par exemple deploy-notify-template).
Recommandation : créer des modèles indépendants pour « Déploiement réussi » et « Échec du déploiement » rend la sémantique plus claire et augmente le taux de validation.
Étape 2 : Configurer les GitHub Secrets
Pour éviter de coder les clés en dur dans les fichiers de Workflow, les informations sensibles doivent être stockées dans les GitHub Repository Secrets.
Accédez à la page du dépôt, cliquez successivement sur Settings → Secrets and variables → Actions → New repository secret, puis ajoutez une à une les variables suivantes :
| Nom du Secret | Description |
|---|---|
ENGAGELAB_DEV_KEY |
Le dev_key de la page des clés API EngageLab |
ENGAGELAB_DEV_SECRET |
Le dev_secret correspondant |
ENGAGELAB_TEMPLATE_SUCCESS |
ID du modèle de notification de déploiement réussi |
ENGAGELAB_TEMPLATE_FAILURE |
ID du modèle de notification d'échec de déploiement |
ON_CALL_PHONE |
Le numéro de mobile destinataire des notifications, incluant l'indicatif pays, ex. +6591234567 |
Étape 3 : Ajouter des étapes de notification dans le Workflow
L'API EngageLab SMS utilise l'authentification HTTP Basic, et la chaîne d'authentification 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": "Déploiement réussi",
"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": "Échec du déploiement",
"time": "'"$(date '+%Y-%m-%d %H:%M')"'"
}
}
}'
Description des paramètres clés
| Paramètre | Description |
|---|---|
if: success() |
S'exécute uniquement si toutes les étapes précédentes du Job en cours ont réussi |
if: failure() |
S'exécute uniquement si une étape quelconque du Job en cours a échoué |
github.repository |
Variable intégrée de GitHub, au format owner/repo |
github.sha |
Le Commit SHA ayant déclenché ce Workflow |
date '+%Y-%m-%d %H:%M' |
Récupère l'heure actuelle du Runner, par défaut en fuseau UTC |
Remarque : la commande
daterécupère l'heure système (UTC) du Runner GitHub Actions. Si vous devez afficher l'heure du fuseau local, définissez la variable d'environnementTZavant la commande, par exemple :TZ='Asia/Shanghai' date '+%Y-%m-%d %H:%M'.
Scénarios étendus
Notifier plusieurs destinataires
En remplaçant le champ to par un tableau, vous pouvez envoyer à plusieurs numéros de mobile en même temps :
-d '{
"to": [
"${{ secrets.ON_CALL_PHONE }}",
"${{ secrets.TEAM_LEAD_PHONE }}"
],
"template": {
"id": "${{ secrets.ENGAGELAB_TEMPLATE_FAILURE }}",
"params": {
"repo": "${{ github.repository }}",
"commit": "${{ github.sha }}",
"status": "Échec du déploiement",
"time": "'"$(date '+%Y-%m-%d %H:%M')"'"
}
}
}'
Alerte d'analyse de sécurité
Dans un Workflow comportant une étape d'analyse de sécurité, notifiez immédiatement lorsqu'une vulnérabilité critique est détectée :
- 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')"'"
}
}
}'
Diffusion du résultat d'exécution d'une tâche planifiée
Pour les Workflows planifiés déclenchés via schedule (par exemple une synchronisation quotidienne de données ou une sauvegarde régulière), envoyez un SMS de synthèse une fois l'exécution terminée :
on:
schedule:
- cron: '0 2 * * *' # Exécution chaque jour à 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()indique une exécution que les étapes réussissent ou échouent, ce qui convient aux scénarios où la livraison de la notification doit être garantie.
Points d'attention
- Un modèle ne peut être utilisé qu'après validation. Si le modèle est en attente de validation ou refusé au moment de l'appel, l'API renverra une erreur
4001. - Le format du numéro de téléphone doit inclure l'indicatif pays, par exemple un numéro de Singapour doit s'écrire
+6591234567; l'absence du+ou de l'indicatif pays entraînera un échec d'envoi. - La chaîne d'authentification est générée dynamiquement à chaque requête ; inutile de stocker à l'avance le résultat encodé en Base64, il suffit de le calculer en temps réel avec
echo -n "key:secret" | base64. - Une réponse HTTP 200 de l'API ne signifie pas que le SMS a été envoyé avec succès ; vérifiez le champ
codedans le corps de la réponse : lorsquecodevaut0ou est absent, tout est normal ; s'il est différent de zéro, consultez les explications des codes d'erreur pour en identifier la cause. - Évitez de divulguer les clés dans les journaux ; n'affichez pas directement le contenu de la variable
AUTHavecechodans l'étaperun.










