Nous avons migré beaucoup de code source vers git et sommes très satisfaits de notre solution actuelle. Nous aimerions que nos fichiers de configuration de serveur soient versionnés sur le même système, mais il y a quelques choses qui ne fonctionnent pas comme nous le voudrions et j'espère que quelqu'un pourra partager son expérience ici.
Cette question est similaire à l' utilisation du contrôle de révision pour les fichiers de configuration du serveur? , mais nous avons des exigences particulières qui ne fonctionnent pas avec les suggestions sur cette question.
La configuration actuelle utilise subversion pour les fichiers de configuration. Le référentiel correspondant ressemble à ceci
/ # racine du référentiel + - www.domain.com/ # configuration pour www | \--etc/ | \ - apache2 / + - dev.domain.com/ # configuration pour dev | + - etc / | \--opter/ | \ - app1 / | \ - configuration conf / # pour app1 sur dev \ - staging.domain.com/ # configuration pour le transfert
Avec subversion, cela fonctionnerait très bien, car il est possible de simplement extraire un sous-répertoire d'un référentiel. De plus, vous pouvez utiliser svn: externals pour pointer vers une structure commune pour plusieurs configurations de configuration différentes. Nous n'avons eu à gérer que les fichiers .svn dans tous les répertoires versionnés. Git, d'autre part, n'a pas svn: les externes et les extractions clairsemées nécessitent toujours que le chemin de la racine vers le répertoire réel soit le même.
Lors de la discussion de la migration vers git, j'ai essayé d'écrire les principales exigences pour la configuration du serveur versioning:
- nous ne voulons qu'un seul référentiel
- il devrait être possible de pousser facilement les modifications de la télécommande centrale
- les ensembles de modifications doivent contenir le véritable auteur
Existe-t-il un bon moyen d'avoir toute la configuration dans un référentiel et de n'avoir qu'un sous-chemin comme copie de travail? Actuellement, j'envisage deux approches, mais je voulais d'abord poser cette question ici
- Si le dépôt .git est à un emplacement fixe, par exemple quelque part dans / var , nous pourrions créer un lien vers le sous-chemin à partir du répertoire de travail "cible". Le problème principal: je ne connais pas de moyen de "lier" de / etc à un autre répertoire afin d'importer uniquement le contenu, à l'exception de la liaison symbolique de fichiers uniques
- J'ai trouvé une autre alternative sur cette question SO , suggérant d'avoir plusieurs branches dans un référentiel. Cela augmenterait certainement la complexité, mais je pouvais nous voir essayer de cette façon.
L'utilisation de git sur une seule machine pour la gestion des fichiers de configuration fonctionne bien, mais je pense qu'il doit y avoir quelqu'un qui l'utilise de la façon dont nous aimerions l'utiliser.
Merci
Kariem
la source
/
raison des autorisations d'écriture.On a new machine, clone the git repo and check out the branch for that machine type
. Puis-je rendre d'autres succursales inaccessibles (pour des raisons de sécurité)?Un peu ici, mais cela ressemble à un crochet de réception de message pourrait faire le travail
Le référentiel maître est stocké dans / var / master,
le hook le clone dans / var / localclone,
puis copie les détails spécifiques à l'hôte.
Vous devrez configurer le hook .git / post-receive localement sur chaque serveur (avec les paramètres appropriés)
Il semble également que vous souhaitiez quelque chose de plus comme marionnette ou chef que git pour cela, cela vous permettrait d'exécuter git pour gérer les configurations et les modules de manière centralisée et que marionnette \ chef gère le déploiement et la vérification pour vous.
la source
voici un travail rapide auquel j'ai pensé
1. Avoir un référentiel central par exemple
/var/repo
2. Mettez des fichiers qui sont globaux pour tous les domaines de ce répertoire.
3. Créez des branches pour chaque sous
/var/repo/subdomain1
- domaine ,/var/repo/subdomain2
etc.4. Créez un crochet de publication où toute poussée vers la branche est fusionnée avec le maître.
Ainsi, lorsque vous changez de configuration,
/var/repo/subdomain2
il est immédiatement fusionné avec master afin que vous puissiez extraire entièrement le référentiel et avoir tous les fichiers de configuration.Lorsque vous souhaitez extraire des configurations individuelles de sous-domaines, il suffit de tirer la branche appropriée.
Comment mettez-vous vos fichiers de configuration dans une
/var/repo/*
toute autre affaire (onglets cron, je peux penser)~ $
la source