Git : déploiement avec git
De wikiGite
Le déploiement automatique d'une application avec GIT s'effectue en 3 temps :
- création/modification de fichiers sur le(s) poste(s) de travail
- push vers le serveur GIT
- déploiement par le serveur GIT vers la destination définitive du logiciel (répertoire local du même serveur, ou serveur distant)
Le dépôt GIT (point 2) n'est pas lisible en tant que tel, les fichiers sont renommés par GIT et classés pour gérer l'historique des versions. C'est pourquoi on ne peut pas directement utiliser ce dépôt comme répertoire définitif pour l'application. Le dépôt GIT doit être vu comme un serveur de versions, rien d'autre.
Sommaire
Sur le serveur GIT
apt-get install git
ou
yum install git
mkdir /home/gittest
cd /home/gittest
git init --bare
Initialized empty Git repository in /home/gittest/
Sur le premier poste de travail
premier push, qui initialise la branche "master" :
cd /Develop/gittest
git init
Initialized empty Git repository in /Develop/gittest/.git/
Création d'un premier fichier :
echo "version 0.1" > README
git add .
git commit -m "Premier commit"
Ajout du dépôt GIT (ici, on passe par le protocol SSH car c'est le seul ouvert sur le firewall. ça évite d'ouvrir un port spécifique GIT) :
git remote add origin ssh://usergit@serveurgit.systea.fr/home/gittest
git push origin master #("master" important la 1ere fois pour créer la branche sur le serveur; ensuite on peut se contenter de "push origin")
Réponse si git non initialisé sur serveur :
fatal: '/home/gittest' does not appear to be a git repository fatal: The remote end hung up unexpectedly"
Si initialisé :
Counting objects: 3, done. Writing objects: 100% (3/3), 210 bytes, done. Total 3 (delta 0), reused 0 (delta 0) To ssh://usergit@serveurgit.systea.fr/home/gittest * [new branch] master -> master
Déploiement
Dans cet exemple, on déploie l'application sur le même serveur que le dépôt git. On déploie (clone du dépôt) dans le répertoire web "Production" :
cd /var/www
git clone /home/gittest Production
Cloning into Production...
done.
Automatisation de la mise en prod : on créé le script postupdate du dépôt GIT qui "pull" (pousse) les modifications qui arrivent vers le répertoire de l'application :
cd /home/gittest/hooks
vi post-update
#!/bin/bash echo "********** mise en production *********" cd /var/www/Production unset GIT_DIR git pull origin master chmod +x post-update
Test : sur le poste de travail créer un autre fichier monscript, puis :
git add . # "add" nécessaire pour intégrer les nouveaux fichiers uniquement
git commit -m "Second commit"
git log
git push origin
Sur le serveur :
ls -l /var/www/Production/
-rw-r--r-- 1 root root 19 Jun 5 09:26 README
-rwxr-xr-x 1 root root 33 Jun 5 09:37 monscript
TODO : procédure si le serveur de production est distant
Autres postes de travail
Pour travailler à partir d'un autre poste :
cd /répertoire_de_dév/
git clone usergit@serveurgit.systea.fr/home/gittest
(l'ajout du dépôt ("git remote add origin ...") n'est pas nécessaire ici, le "clone" se charge de tout.
A partir de tous les postes, l'envoi d'une modification se fera ensuite toujours par :
cd gittest
vi monscript.sh # modifier le fichier
git commit -a -m "commit poste2"
git push origin