(Excuses à l'avance pour la stupidité de cette question. Je suis normalement un programmeur, pas un administrateur système, mais je me suis chargé d'automatiser certaines choses et de nettoyer d'autres choses qui sont automatisées mais pas de la manière la plus jolie . :-)
J'ai étudié divers outils d'automatisation du déploiement de logiciels sur un tas de serveurs, tels que cfengine, Puppet et Chef. Jusqu'à présent, Puppet a l'air le plus attrayant, mais je ne suis certainement pas encore engagé.
Ces outils semblent tous pouvoir faire un excellent travail pour maintenir un groupe de serveurs à jour avec des logiciels préemballés .
Ce que je ne comprends pas, c'est: comment utiliser un outil (comme Puppet) pour gérer les déploiements de notre propre logiciel interne? Je pense que je suis perdu parce que j'ai vu mille tutoriels montrant comment garder Apache ensure => latest
(ce qui est plutôt cool), mais rien qui correspond tout à fait à mon cas d'utilisation aujourd'hui, qui ressemble plus à:
- quand un être humain pousse le bouton,
- extraire la branche A du référentiel de contrôle de version B
- exécutez la commande C pour le compiler
- copier les binaires D sur les serveurs E1 à E10
- sur chaque serveur, exécutez la commande F pour que toutes les modifications prennent effet
Puppet sonne bien, et je vois totalement l'avantage d'une configuration déclarative et idempotente sur certains scripts shell, mais je n'ai vu aucun tutoriel pour "vous voulez mettre à jour vos scripts shell vers Puppet (ou Chef, ou cfengine) alors voici ce que vous devrait faire". Existe-t-il une telle chose? Est-il évident pour d'autres personnes de prendre les choses fournies dans les documents Puppet et de reproduire le comportement que je veux? Suis-je tout simplement pas compris?
Jusqu'à présent, cela me semble que l'être humain (# 1) empaquette manuellement le logiciel (# 2 et # 3) externe à Puppet, met à jour manuellement la configuration Puppet, ce qui déclenche Puppet pour mettre à jour les serveurs. .. peut être? (Je suis un peu confus ici, comme je suis sûr que vous pouvez le dire.)
Merci!
Réponses:
Nous utilisons des marionnettes, mais nous ne les utilisons pas pour nos déploiements d'applications. Comme vous l'avez dit, vous pouvez empaqueter votre logiciel en debs ou rpms, configurer votre dépôt privé partout et utiliser des marionnettes pour contrôler les versions, mais vous êtes toujours à la merci d'attendre la prochaine actualisation de 30 minutes sur tous vos serveurs.
Ce que je ferais (et c'est proche de ce que nous faisons, mais nous utilisons des rails donc il n'y a pas d'étape de compilation):
Chef peut avoir des capacités de push plus en temps réel; Je ne le connais pas très bien.
la source
Les étapes 1 à 3 sont généralement automatisées dans un processus de génération. Normalement, la sortie de ce processus passera par un cycle de test. J'empaquette la sortie afin qu'elle puisse être déployée dans un environnement de test d'intégration. Ce n'est que si les tests d'intégration réussissent que les étapes 4 et 5 doivent avoir lieu.
Votre étape 5 implique une panne de déploiement. Pour quelque chose comme apache, cela peut être géré par un arrêt et un redémarrage pendant la rotation du journal. Un script crontab peut gérer cela. Si vous pouvez gérer les modifications progressives sur une période d'une heure environ, incluez simplement le redémarrage dans l'étape de déploiement 4. Puppet ou cfengine sont des outils appropriés pour l'étape 4. Cela peut être déclenché en mettant à jour le référentiel lorsque les tests d'intégration réussissent.
la source
Recherchez des recettes de marionnettes et vous trouverez des tonnes de scripts prêts pour la production. Oui, vous devrez emballer manuellement le logiciel.Si vous gérez votre propre référentiel personnel, vous pouvez utiliser l'indicateur assure => dernier. Ensuite, écrivez une recette pour dire à la marionnette d'installer le logiciel. La recette devrait être placée sur le serveur maître d'où elle serait propagée aux esclaves.
la source