3 votes

Déploiement de sites Web GIT

J'essaie de configurer GIT pour déployer mon projet à différents endroits en fonction de la branche. (Je pense que c'est ce que je veux faire de toute façon).
Ma configuration actuelle est la suivante : Une machine de développement locale exécutant Netbeans pour effectuer des modifications. Serveur distant hébergeant les projets GIT (même serveur exécutant apache). - 2 sous-sites existent un test.FQDN.com et un live.FQDN.com

Ce que je voudrais faire, c'est avoir un projet GIT (MonProjet) et créer une nouvelle branche de fonctionnalité. Tous les commits effectués sur la nouvelle branche de fonctionnalités seraient poussés vers test.FQDN.com. Une fois que les fonctionnalités ont été testées et ensuite fusionnées dans la branche master, elles seraient poussées vers live.FQDN.com. J'ai regardé les hooks post-receive de GIT et j'ai pu utiliser la commande "git checkout -f" pour tirer sur le site test.FQDN.com mais cela ne tire que la branche master et pas la nouvelle branche de fonctionnalités. Je n'ai pas de fonds pour faire appel à une tierce partie pour faire fonctionner ce système, et je préférerais rester dans GIT mais avoir un accès complet au serveur web s'il y a un paquet à installer qui aiderait à contrôler cela. Toute suggestion serait la bienvenue !

EDIT Voici à quoi ressemble mon post-recevoir actuellement :

#!/bin/sh
umask 002
cd /srv/git/projects/APP.git
git push --mirror backupLocation:APP
branch=$(git branch | grep "*" | sed "s/* //")

if [ "$branch" == "master" ]
then
    GIT_WORK_TREE=/srv/www/ssl_apps/APP git checkout -f
else
    GIT_WORK_TREE=/srv/www/ssl_apps/APPtest git checkout -f
fi

2voto

Rogier Points 181

Notre système en quelques mots :

www.git-server.com

si une branche a été poussée, git post-receive hooks incrémente un nombre dans un fichier statique /var/www/<branch>.version

sur le serveur client (il y a plusieurs serveurs, plusieurs installations par serveur) :

cron script s'exécute toutes les minutes, il vérifie www.git-server.com/<branch>.version pour chaque branche

si la version a été incrémentée, il effectue la mise à jour :

cd /var/<branch>.subsite;
git pull --rebase

un délai d'une minute (maximum) est acceptable pour nos besoins.

0voto

nickgrim Points 4236

Vous pouvez utiliser reset --hard <branchname> pour mettre votre copie de travail dans un état détaché (detached-HEAD) ; changez la dernière partie de votre post-receive crochet vers :

if [ "$branch" == "master" ]
then
    GIT_WORK_TREE=/srv/www/ssl_apps/APP git reset --hard $branch
else
    GIT_WORK_TREE=/srv/www/ssl_apps/APPtest git reset --hard $branch
fi

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X