2010-11-11 2 views
2

J'utilise git post-receive hook pour déployer des versions de l'application Web à partir de trois branches (maître, staging et stable) sur trois serveurs (développement, test et production). L'appariement entre les branches et les serveurs est actuellement codé en dur dans le script. Cependant je voudrais supprimer cette restriction et rendre ce crochet possible pour gérer un nombre illimité de branches. Il peut se faire de la manière suivante:Git post-recevoir un crochet pour mettre à jour plusieurs serveurs

  • déplacer toutes les options de configuration par branche à certains fichiers séparés, par exemple .git/???/<branch_name>
  • le script principal vérifie si un tel fichier est disponible pour toutes les branches, la source et puis déployer sur le serveur distant en utilisant les paramètres de configuration de ce fichier.

Cependant, je ne sais pas où exactement dans le répertoire .git puis-je placer de tels fichiers. Ou peut-être y a-t-il une meilleure solution?

Répondre

3

Vos options, pour autant que je peux dire:

  • Utilisez une convention plus forte pour nommer serveur, de sorte que config est pas nécessaire, au-delà du nom de domaine de base. Laissez cela dans le script. (C'est-à-dire, branchX -> branchX-deploy.example.com.)

  • Placez un fichier de configuration où vous voulez dans le répertoire .git, comme vous l'avez suggéré. Si ce n'est pas un nom de fichier pour lequel git se soucie, il ne le remarquera jamais. Je ne suis pas sûr pourquoi vous voudriez faire cela, cependant.

  • Mettez-le dans .git/config. Git vous permet de définir des paramètres de configuration arbitraires de la forme branch.<name>.foo. (Je ne sais pas s'il s'agit d'une caractéristique ou d'un oubli.) Dans votre cas, quelque chose comme branch.master.deploy_server est réglé sur development.example.com. Votre script pourrait ensuite passer par toutes les branches, et vérifier si cette option de configuration est définie ou non. (Utilisez git config --get.)

  • Mettez un fichier de configuration dans votre référentiel. Cela semble beaucoup mieux que de le cacher. Vous pourriez aussi bien suivre les paramètres. Si nécessaire, fournissez un moyen de les remplacer: fournissez un fichier de configuration différent en tant qu'argument, fournissez des branches/serveurs individuels en tant qu'options, des invites interactives, ce qui vous convient.

Personnellement, je ferais probablement le dernier. Le suivi des paramètres, même s'ils ne sont que des paramètres par défaut, ne peut pas vous nuire.

+0

Je souhaite avoir au moins le nom d'utilisateur, le nom d'hôte et le répertoire cible afin que seules les branches de nommage ne fonctionnent pas. Je ne veux pas non plus placer une telle config dans l'arborescence du code source car elle n'a rien à voir avec les sources et je ne veux pas déranger les développeurs avec des connaissances inutiles. Il semble que j'utiliserai '.git/config' puisque c'est la solution la plus propre pour le moment. – jollyroger

+0

Pour l'enregistrement, je ne suis pas du tout d'accord avec le fait que .git/config est le plus propre. C'est non-tracé. – Cascabel

+0

Mais c'est vraiment ce que je cherche. Ce fichier ne doit pas être suivi et disponible pour un développeur car le déploiement n'est pas une tâche de développeur (en tant que rôle). La responsabilité du suivi du fichier repose sur l'administrateur et ses outils uniquement. J'ai [implémenté] (https://github.com/jollyroger/vcs-hooks/tree/master/git/server-sync/) cette solution, peut-être que cela peut être utile pour quelqu'un d'autre que moi. – jollyroger

Questions connexes