Déployer notre propre logiciel à l'aide de Puppet?

8

(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 à:

  1. quand un être humain pousse le bouton,
  2. extraire la branche A du référentiel de contrôle de version B
  3. exécutez la commande C pour le compiler
  4. copier les binaires D sur les serveurs E1 à E10
  5. 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!

Ken
la source
Puppet est conçu pour fonctionner avec le modèle "Packages, Files, Services". Puppet serait génial pour préparer vos serveurs, mais un serveur de construction continue comme Jenkins pourrait être un meilleur outil pour ce cas d'utilisation.
spuder

Réponses:

5

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):

  • Utilisez marionnette pour tout configurer sur le serveur, sauf l'application elle-même. Dépendances, serveurs Web, utilisateurs, chemins, etc.
  • Demandez à votre serveur de build automatisé (bambou, hudson, régulateur de vitesse, etc.) de placer les artefacts compilés dans un gestionnaire de référentiel comme Nexus.
  • Utilisez capistrano pour pousser la génération vers vos serveurs.

Chef peut avoir des capacités de push plus en temps réel; Je ne le connais pas très bien.

Ben Jencks
la source
Ce logiciel particulier n'utilise pas Ruby. J'ai l'impression que Puppet est assez agnostique, mais que Capistrano est conçu pour fonctionner au mieux avec les applications Rails. Mais cela fait quelques années que j'ai utilisé la casquette, alors peut-être que cela a changé, et je vais le vérifier à nouveau maintenant.
Ken
1
Capistrano penche vers Rails, mais est flexible et peut facilement être utilisé pour d'autres langues. Lisez simplement les recettes de déploiement par défaut et remplacez-les dans votre propre recette. C'est juste de la programmation. Mon entreprise déploie des dizaines d'applications PHP sur une poignée de serveurs via Capistrano, bien que nous utilisions le frontend Webistrano pour le rendre plus facile à gérer.
Martijn Heemels
2
Capistrano va bien, mais MCollective et RunDeck sont mieux réglés pour s'intégrer à Puppet.
jgoldschrafe
Vous pouvez également jeter un œil à Fabric; c'est un peu comme Capistrano, mais en Python.
Xiong Chiamiov
1

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.

BillThor
la source
1

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.

Sameer
la source