web-dev-qa-db-fra.com

Déclenche automatiquement la traction Git pour le site Web sur la poussée de Github

Je viens de terminer la reconception de mon environnement de développement de site Web pour que tout mon code source se trouve dans Github et j'ai réussi à configurer Git sur le serveur distant, de sorte que l'exécution de la commande git pull Origin master sur le serveur Web met à jour l'application complète. code source du référentiel Github.

Ce que j'essaie de comprendre maintenant, c'est un moyen d'automatiser le processus. Le code extrait de la branche principale, qui a toujours le code prêt à être déployé et qui a déjà été testé. Lorsque je transmets le code à la branche principale, je souhaite utiliser l'un des points d'ancrage Github pour exécuter automatiquement l'extraction depuis le serveur afin de mettre à jour l'application.

J'ai un accès SSH au serveur et je peux exécuter la commande manuellement chaque fois que j'en ai besoin pour le moment, mais il est fastidieux de transmettre du code à Github, puis d'ouvrir une connexion SSH sur le serveur et d'extraire le code mis à jour.

Je ne sais pas s'il existe une fonctionnalité native dans Git qui prend en charge cette fonctionnalité ou si je devrais utiliser un hook Web et exécuter un fichier sur le serveur Web pour déclencher la commande git pull Origin master.

Merci

7
Chris Rutherfurd

Okay ont réussi à comprendre celui-ci. Il s'avère qu’il n’existe pas de fonctionnalité native dans Git pour déclencher une extraction à distance (comme pour le transfert de code dans le référentiel et le fait que le référentiel déclenche une extraction Origine sur le serveur Web).

J'ai résolu le problème en envoyant un script PHP sur mon serveur Web sous le nom d'hôte par défaut. Dans ce fichier, je l'ai configuré pour exécuter Shell_exec("cd /path/to/my/site/root" && Sudo git pull Origin master". Il est ensuite configuré pour m'envoyer un email avec la sortie du message via STDOUT pour m'avertir si l'extraction a été effectuée avec succès ou non.

J'ai ensuite configuré Github avec un Webhook afin que chaque Push dans le référentiel déclenche un appel webhook au fichier que j'ai simplement appelé http://server.domain.com/github-deploy.php.

Il y a actuellement des vérifications de sécurité non divulguées que j'effectue pour m'assurer que personne d'autre ne peut accéder au fichier et, avec le temps, j'ajouterai probablement des vérifications IP pour m'assurer que les demandes au fichier proviennent uniquement des IP situées dans le bloc d'adresses de Github.

Une remarque importante que je devrais ajouter ici est que le seul moyen de résoudre ce problème est d'autoriser l'accès de l'utilisateur Apache en tant que sudoer sur le serveur, tout en le limitant à pouvoir exécuter la commande Sudo afin de lancer Git sinon le message d'accès refusé sera déclenché. En le limitant à git et en ne transmettant aucune entrée du script appelant à la commande shel_exec, je pense avoir été en mesure de compenser toute préoccupation en matière de sécurité.

Finalement, je vais probablement implémenter cela en tant que lien de service avec Github, mais pour le moment, c'est amplement suffisant.

7
Chris Rutherfurd

Servir votre site depuis un "répertoire de travail" git est considéré comme une mauvaise pratique - voir les raisons ici et ici .

Pour ce faire, la meilleure solution consiste à configurer un référentiel "nu" sur votre serveur avec un hook "post-receive". Cet article c'est ce que j'ai suivi quand je l'ai fait récemment, l'idée de base est la suivante:

  1. Créez un dépôt "nu" avec git init --bare

  2. Éditez hooks/post-receive dans votre rapport nu pour le copier dans votre racine Web: GIT_WORK_TREE=/var/www/yoursite git checkout -f

  3. Sur votre ordinateur local, ajoutez le dépôt nu comme télécommande.

  4. Utilisez git Push <remotename> pour publier sur votre site actif.

8
DisgruntledGoat