Table of Contents
TL;DR
feature
→ dev
→ preprod
→ master
On commence par faire une branche dédiée au truc sur lequel on travaille. Ensuite quand ça fonctionne à peu près chez soi, on merge sur dev
. On fait tester aux autres devs, etc.
Quand c'est pas trop mal, on merge sur preprod
. On teste en profondeur sur le serveur de test. Si tout va bien, on merge preprod
sur master
.
Attention, dès que le git push origin preprod|master
est lancé, le déploiement est automatique sur les instances concernées !
Actuellement, seul le serveur de préprod est disponible à l'adresse https://v5.planet-casio.com
On fait bien attention à tester avant de pousser en ligne !
Fonctionnement
Lorsqu'un git push
est effectué, l'utilisateur forgejo
du VPS appelle le crochet de post-transaction.
forgejo
se connecte alors en ssh sur les comptes pc
et pc-dev
et exécute les scripts de déploiement ~/deployment.sh
.
#!/bin/bash
# Deployment script. Git pull the branch preprod
logfile=$HOME/deployment.log
echo "=== Started deployment ($(date '+%Y-%m-%d %H:%M:%S')) ===" >> $logfile
cd $HOME/www >> $logfile 2>&1
git pull origin preprod >> $logfile 2>&1
make get-extra >> $logfile 2>&1
flask db upgrade >> $logfile 2>&1
./master.py update-all >> $logfile 2>&1
flask crontab add >> $logfile 2>&1
sudo systemctl reload uwsgi@pc-dev >> $logfile 2>&1
echo -e "=== Ended deployment ===\n" >> $logfile
exit 0
Droits et clés ssh
- La clé publique de
forgejo
doit figurer dans le fichier.ssh/authorized_keys
de chaque utilisateur ayant un script de déploiement ; - la clé publique des utilisateurs de déploiement doit être référencée dans les clés de déploiement des dépôts ;
- le fichier
deployment.sh
doit être marqué comme exécutable pour son propriétaire.