GitHub Actions peut s'exécuter sur des plannings en utilisant la syntaxe cron. Mais les workflows planifiés peuvent échouer silencieusement sans notification. Voici comment monitorer vos workflows GitHub Actions et être alerté quand ils ne se terminent pas.
GitHub Actions Planifiées
Les workflows peuvent être déclenchés sur un planning :
name: Sync Données Quotidien
on:
schedule:
- cron: '0 2 * * *' # Quotidien à 2h UTC
jobs:
sync:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: ./sync-data.sh
Pourquoi Monitorer GitHub Actions ?
Les workflows planifiés peuvent échouer car :
- Problèmes d'accès au repo - Token expiré, permissions changées
- Runner indisponible - Pannes GitHub, limites de ressources
- Erreurs de workflow - Erreurs de syntaxe, étapes échouées
- Planning non déclenché - GitHub saute parfois les plannings
- Échecs silencieux - Le job échoue mais personne ne le remarque
Méthode 1 : Ping en Étape Finale
Ajoutez une étape de ping à la fin de votre workflow :
name: Sauvegarde Quotidienne
on:
schedule:
- cron: '0 2 * * *'
jobs:
backup:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Exécuter sauvegarde
run: ./backup.sh
- name: Notifier monitoring
if: success()
run: curl -fsS https://wizstatus.com/ping/${{ secrets.PING_TOKEN }}
Le if: success() assure que le ping ne s'exécute que si toutes les étapes précédentes réussissent.
Méthode 2 : Étape de Monitoring Dédiée
Plus explicite et lisible :
jobs:
backup:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Exécuter sauvegarde
run: ./backup.sh
notify:
needs: backup
runs-on: ubuntu-latest
if: success()
steps:
- name: Ping monitoring
run: |
curl -fsS --retry 3 \
"https://wizstatus.com/ping/${{ secrets.PING_TOKEN }}"
Configurer les Secrets
Stockez les URLs de ping de façon sécurisée :
- Allez dans Settings du repo → Secrets and variables → Actions
- Ajoutez un nouveau secret :
PING_TOKENouPING_URL - Référencez dans le workflow :
${{ secrets.PING_TOKEN }}
Configurer les Moniteurs Heartbeat
Pour chaque workflow planifié :
Exemple : Sauvegarde Quotidienne à 2h UTC
- Nom du moniteur : GitHub Actions - Sauvegarde Quotidienne
- Planning : Quotidien à 02:00 UTC
- Période de grâce : 30-60 minutes (pour les délais de queue)
Exemple : Sync Horaire
- Nom du moniteur : GitHub Actions - Sync Horaire
- Planning : Chaque heure
- Période de grâce : 20 minutes
Bonnes Pratiques
- Utilisez les secrets - Ne codez jamais en dur les URLs de ping
- Réessayez les pings - Les problèmes réseau arrivent
- Correspondez les fuseaux - GitHub utilise UTC
- Définissez des périodes de grâce généreuses - Comptez les délais de queue GitHub
- Monitorez workflow_dispatch aussi - Si les workflows déclenchés manuellement sont critiques
- Gardez les workflows actifs - Poussez occasionnellement pour éviter la désactivation
Exemple : Workflow Monitoré Complet
name: Pipeline ETL Quotidien
on:
schedule:
- cron: '0 4 * * *' # 4h UTC quotidien
workflow_dispatch: # Permet déclenchement manuel
env:
PING_URL: https://wizstatus.com/ping
jobs:
extract:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Extraire données
run: ./extract.sh
transform:
needs: extract
runs-on: ubuntu-latest
steps:
- name: Transformer données
run: ./transform.sh
load:
needs: transform
runs-on: ubuntu-latest
steps:
- name: Charger données
run: ./load.sh
notify:
needs: [extract, transform, load]
runs-on: ubuntu-latest
if: success()
steps:
- name: Notifier pipeline terminé
run: |
curl -fsS --retry 3 \
"${{ env.PING_URL }}/${{ secrets.PING_ETL }}"