Comment déployer sur un serveur distant en une commande GIT, pas à pas

$ git push DISTANT-SERVER BRANCH-TO-BE-PUSHEDDISTANT-SERVER est le nom du serveur distant, genre “preprod” ou “prod” 
BRANCH-TO-BE-PUSHED est le nom de la branche que je veux déployer, genre “develop” ou “master”
$ ssh DISTANT-USER@SERVER_HOST
$ mkdir DEPLOY-FOLDER

DISTANT-USER: c’est l’utilisateur qui se connecte au serveur distant
SERVER_HOST : c’est votre hôte de connexion ou l’ip de votre serveur distant
DEPLOY-FOLDER: c’est le dossier de déploiement (par exemple /var/www)
$ ssh DISTANT-USER@SERVER_HOST
$ mkdir BARE-REPOSITORY-FOLDER

BARE-REPOSITORY-FOLDER: c’est le dossier du dépot de déploiement (par exemple /home/DISTANT-USER/deploy) => l’important c’est que vous y ayez accès par ssh
$ cd BARE-REPOSITORY-FOLDER
$ git init --bare PROJECT-NAME.git

PROJECT-NAME: bein… le nom du projet (genre “project”)
$ ssh DISTANT-USER@SERVER_HOST
$ cd BARE-REPOSITORY-FOLDER/PROJECT-NAME.git/hooks
$ nano post-receive

nano: j’utilise nano, mais vous pouvez utiliser ce que vous voulez hein... de vi à gedit (brrrr…)
#!/bin/bash
TARGET="DEPLOY-FOLDER"
GIT_DIR="BARE-REPOSITORY-FOLDER/PROJECT-NAME.git"
BRANCH1="BRANCH-TO-DEPLOY"
while read oldrev newrev ref
do
if [[ $ref = refs/heads/$BRANCH1 ]];
then
echo "Ref $ref received. Deploying ${BRANCH1} branch to preprod..."
git --work-tree=$TARGET --git-dir=$GIT_DIR checkout $BRANCH1 -f
chown www-data:www-data -R $TARGET
else
echo "Ref $ref received. Doing nothing: only the ${BRANCH1} branch may be deployed on this server."
fi
done
A remplacer:
DEPLOY-FOLDER: dossier de déploiement (ex: /var/www)
BARE-REPOSITORY-FOLDER: dossier du dépot nu (ex: /home/deploy)
PROJECT-NAME: nom du projet (ex: project)
BRANCH-TO-DEPLOY: la branch de déploiement (en prod par exemple: master)
$ cd WORKING-DIRECTORY
$ git remote add REMOTE-SERVER DISTANT-USER@SERVER_HOST:BARE-REPOSITORY-FOLDER/PROJECT-NAME.git

WORKING-DIRECTORY: le dossier dans lequel vous développez et avez un dépot GIT en cours
REMOTE-SERVER: le serveur distant, par exemple “production” ou “preprod”
$ git push REMOTE-SERVER BRANCH-TO-DEPLOY
#!/bin/bash
declare -A branches=(
[develop]=1 [master]=1
)
TARGET="/home/prod/www"
GIT_DIR="/home/prod/deploy"
while read oldrev newrev ref
do
BRANCH=${ref/"refs/heads/"/""}
if [[ -n "${branches[$BRANCH]}" ]];
then
echo "Ref $ref received. Deploying ${BRANCH1} branch to preprod..."
sudo chown debian:www-data -R $TARGET
git --work-tree=$TARGET --git-dir=$GIT_DIR checkout $BRANCH -f
cd $TARGET
sudo chmod 777 -R /home/vdlv/www/translate/langcache/
composer install
sudo chown www-data:www-data -R $TARGET
else
echo "Ref $ref received. Doing nothing: you can't deploy ${BRANCH} branch on this server."
fi
done

--

--

https://ltn.agency | J’écris pour Le Tarsier Numérique tous les petits défis techniques que nous rencontrons et dont nous voulons vous parler.

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store