Gestion du webhook Github pour déploiement CI/CD sur vos environnements.
Sur chaque dépôt à déployer, un webhook doit être configuré dans GitHub pour notifier cette application à chaque push.
- Aller dans Settings → Webhooks → Add webhook du dépôt concerné
- Renseigner les champs suivants :
| Champ | Valeur |
|---|---|
| Payload URL | http://<adresse-du-serveur>:5000/webhook |
| Content type | application/json |
| Secret | La valeur de webhook_secret définie dans config.json (si configurée) |
| Which events? | Just the push event |
- Cocher Active et valider.
GitHub enverra alors un événement POST /webhook à chaque push. Seuls les pushs sur la branche main déclenchent un git pull.
git clone https://github.com/lenoirpatrick/githubwebhook.git
cd githubwebhook
pip install -r requirements.txt --break-system-packages
chmod +x run.shSi le fichier config/config.json est absent au démarrage, il est créé automatiquement avec les valeurs par défaut (ip: 127.0.0.1). L'application ne plante pas.
Le fichier peut être édité manuellement ou via l'interface web de la page d'accueil (boutons Ajouter / Modifier / Supprimer).
Structure du fichier :
{
"ip": "0.0.0.0",
"webhook_secret": "votre_secret_github",
"lenoirpatrick/githubwebhook": {
"path": "/home/pi/app/githubwebhook"
},
"lenoirpatrick/autreprojet": {
"path": "/home/pi/app/autreprojet"
}
}| Clé | Description |
|---|---|
ip |
Adresse d'écoute : 0.0.0.0 pour toutes les interfaces, 127.0.0.1 pour local uniquement |
webhook_secret |
Secret partagé avec GitHub pour valider la signature HMAC-SHA256 (optionnel mais recommandé) |
"owner/repo" |
Chemin absolu local du dépôt à mettre à jour lors d'un push sur main |
Plusieurs dépôts peuvent être configurés simultanément. Toute modification via l'interface web est immédiatement persistée dans config.json.
./run.shLe script installe les dépendances, puis lance l'application en arrière-plan via nohup. Les logs sont disponibles dans nohup.out.
Pour que le serveur se lance automatiquement au démarrage de Linux, créer un service systemd.
1. Créer le fichier de service (adapter les chemins et l'utilisateur) :
sudo nano /etc/systemd/system/githubwebhook.service[Unit]
Description=GitHub Webhook Server
After=network.target
[Service]
Type=simple
User=pi
WorkingDirectory=/home/pi/app/githubwebhook
ExecStart=/usr/bin/python3 /home/pi/app/githubwebhook/gitpull.py
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target2. Activer et démarrer le service :
sudo systemctl daemon-reload
sudo systemctl enable githubwebhook
sudo systemctl start githubwebhook3. Vérifier que le service tourne :
sudo systemctl status githubwebhookCommandes utiles :
sudo systemctl stop githubwebhook # arrêter
sudo systemctl restart githubwebhook # redémarrer
journalctl -u githubwebhook -f # suivre les logs en temps réel