Git : déploiement avec git

De wikiGite

Le déploiement automatique d'une application avec GIT s'effectue en 3 temps :

  1. création/modification de fichiers sur le(s) poste(s) de travail
  2. push vers le serveur GIT
  3. 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.

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