web-dev-qa-db-fra.com

Le chef est-il un outil approprié à utiliser pour le déploiement des applications?

Nous utilisons Chef pour la gestion de la configuration (en veillant à ce que le "nœud DB" a la version appropriée de la bonne dB sur elle; qu'un "serveur d'app" a la version droite de Java et env VaRs sur elle, etc.). Ainsi que le déploiement (chef-client --once) de nos applications aux nœuds de serveur d'applications appropriés.

Pour moi, personnellement, je me sens que le déploiement appartient au domaine du serveur CI. Tout en plus de l'application (le conteneur, le système d'exploitation, les outils système, la configuration du système, etc.) appartient à Config Management, et est donc mieux géré par des outils tels que chef, marionnette, etc.

Actuellement, notre CI construit produit un artefact (un pot exécutable avec un conteneur Tomcat intégré), puis exécute le client-chef sur tous les nœuds où le pot doit être déployé. Le client-Chef-Client est configuré pour tirer le pot du serveur CI. Cela me semble hacrain pour moi et j'essaie de rechercher une solution meilleure et plus cogente.

Alors je demande:

  • Le déploiement appartient-il au serveur CI ou à l'outil CM? pourquoi?
  • S'il appartient au serveur CI, quels mécanismes (SSH, SCP, etc.) doivent-ils utiliser le serveur CI pour effectuer réellement le déploiement? Nous utilisons le bambou mais pourraient aussi facilement parler de Jenkins, Hudson, etc.
  • Il existe une différence entre le déploiement (placer l'application sur le nœud) et en cours d'exécution . Est-ce que la marche appartient également au serveur CI, l'outil CM ou un autre processus? En d'autres termes, ce qui devrait en réalité arrêter la version "ancienne" de l'application, le remplacer par la version "nouvelle", puis Démarrer la nouvelle version? Est-ce un candidat à quelque chose comme une pont courante?
5
herpylderp

Je soupçonne que les réponses vont être largement basées sur l'opinion et refléter l'atmosphère politique des entreprises travaillant pour, mais voilà ...

Je dirais que tout commence par "pourquoi?" Pourquoi construisons-nous des applications? Remplir les objectifs commerciaux. Pourquoi construisons-nous des infrastructures? Exécuter des applications qui remplissent les objectifs commerciaux. Il semble donc qu'il y ait une hiérarchie naturelle ici. Les serveurs CI construisent des applications et testez-les sur quelque chose. CM Outils Construisez des serveurs. Ainsi, une chaîne DevOps correctement configurée utilise probablement des serveurs CI pour invoquer des outils CM pour vous assurer que l'endroit où ils sont sur le point de déployer sur est configuré correctement. Ensuite, une fois que les tests passent, ces mêmes serveurs CI invoquent des outils de déploiement (si nécessaire) pour appuyer sur le code des serveurs de production qui pourrait être construit avec des scripts CM à un moment de préavis. En d'autres termes, les scripts deviennent la définition de ce qui est là - aucun changement n'est apporté aux serveurs qui ne sont pas scriptés en premier. En ce qui concerne l'application existante, cela dépend de la configuration de votre infrastructure. Si vous pouvez gérer correctement un serveur d'applications hors ligne (sans affecter les utilisateurs), déployez un nouveau code, exécutez un test de fumée et apportez-le en ligne dans un script roulant dans une ferme de serveurs, c'est ce que vous tournez pour - Continu Capacités de livraison qui n'affectent pas les utilisateurs finaux.

4
Calphool

Mon avis est que le déploiement appartient au serveur CI. Un outil CM comme Chef est de construire votre infrastructure à l'état souhaité. Mais le déploiement est plus que cela. Supposons que vous ayez à déployer un système comprenant une application Web front-end sur plusieurs serveurs équilibrés de charge, certains scripts de modification de DB et quelques services de back-end à un autre ensemble de serveurs. Il y a des dépendances et une commande impliquées dans le déploiement. par exemple. DB change avant les services de fin de compte sur tous les serveurs et avant l'application Web frontale. Il peut y avoir des actions nécessaires pour être prises s'il y a une erreur à n'importe quelle étape. Le chef tel que je comprends ne peut pas gérer ce genre de scénarios alors que tout outil CI compétent serait.
[ C'est une autre raison de garder CI et cm séparé.

0
softveda