Comment appliquez-vous des pratiques de développement comme le contrôle de version, les tests et l'intégration / le déploiement continus à l'administration système?

18

Imaginez que vous allez gérer un certain nombre de serveurs avec un certain nombre de services différents utilisés par un certain nombre de personnes. Supposons maintenant que vous souhaitiez reconfigurer ou remplacer certains logiciels sur l'un de ces serveurs. Évidemment, vous ne voulez pas travailler sur des serveurs en production.

S'il s'agissait d'un changement de code, en tant que développeur, je ferais le changement sur ma machine de développement locale, le testerais localement et validerais le changement dans un système de contrôle de version. Les modifications pourraient ensuite être déployées dans un environnement intermédiaire, testées plus avant et finalement déployées dans un environnement de production. Il serait également facile pour moi de revenir en arrière, si nécessaire.

De manière générale ou spécifique, comment y parvenir dans l'administration système?

(La première chose qui me vient à l'esprit est d'utiliser des machines virtuelles et de mettre des images de machines virtuelles dans le contrôle de version, mais je suis sûr qu'il y a beaucoup de littérature et de solutions intelligentes que je ne connais pas actuellement.)

arex1337
la source
Vous posez des questions sur les outils techniques ou sur les cadres de gestion de ce genre de choses? Parce qu'il serait difficile de parler de cette dernière option sans mentionner des choses comme la gestion des changements et des versions de la discipline ITIL.
Rob Moir
@ DJPon3 J'aimerais connaître l'approche générale (comment y penser) et les outils pour le faire. N'hésitez pas à utiliser mon dernier paragraphe comme point de départ.
arex1337

Réponses:

15

La réponse courte est "Gestion du déploiement du système d'exploitation", "Gestion de la configuration" et "Packaging logiciel". Une longue réponse suit.

Je voudrais ajouter à la réponse de Daniel Pittman une ventilation de ce qui constitue un "système" dans l'administration des systèmes.

Un système ou un environnement va comprendre:

  • Les serveurs
  • Système opérateur
  • Configuration
  • Forfaits fournisseurs; et
  • Forfaits locaux

Ces processus seront enveloppés de processus tels que:

  • Déploiement ou imagerie du système d'exploitation
  • Gestion de la configuration
  • Gestion des progiciels
  • Audit / journalisation
  • surveillance
  • Sauvegardes

Et vous aimeriez les combiner pour vous aider à atteindre des objectifs non fonctionnels tels que:

  • Répétabilité
  • Maintenabilité
  • Mesurabilité
  • Performance
  • Traçabilité
  • Testabilité
  • Changeabilité

Ceci est une décharge de cerveau rapide. Je suis sûr que d'autres pourraient être ajoutés à toutes les listes.

Votre question touche à plusieurs d'entre eux sans utiliser les mots spécifiques. Par exemple, vous voulez pouvoir déployer facilement et revenir en arrière, c'est-à-dire que vous voulez la maintenabilité; vous voulez le faire dans un environnement de test et tester jusqu'à ce qu'il passe c.-à-d. répétabilité, testabilité et mesurabilité; vous envisagez de mettre des images vm dans le contrôle de version parce que vous aimeriez la répétabilité des déploiements de système d'exploitation et de configuration.

Il existe de nombreux outils pour vous aider, certains d'entre eux mentionnés par Daniel. Quelques autres sont:

  • Kickstarts (basé sur RedHat), Preseed (basé sur Debian), WDS (MS Windows) pour déployer des environnements de système d'exploitation connus
  • Spacewalk / Satellite (basé sur RedHat), stratégies de groupe (MS Windows) pour la configuration et la gestion des packages
  • Systèmes de conditionnement YUM et APT pour générer, déployer, mettre à niveau et supprimer des packages (ensembles de fichiers binaires, données et configuration comprenant un logiciel)
  • Nagios, OpenNMS et SCOM pour la surveillance
  • Amanda, Bacula et Windows Backup Server pour les sauvegardes
  • Munin, PCP et Hyperic pour la surveillance des performances
  • CVS, SVN, GIT ou Bazaar pour le contrôle de version
  • Hudson et Jenkins pour la gestion des builds
  • Sélénium et robot pour les tests
  • Bugzilla, Request Tracker et Jira pour l'enregistrement, la communication et le suivi

Encore une fois, ce n'est pas une liste complète, mais quelque chose que je garde dans ma tête pour me guider et j'espère que cela vous aidera aussi.

nearora
la source
Qu'est-ce que Marvin? Je ne trouve pas de référence ou est-ce une faute de frappe?
thelsdj
s / Marvin / Hudson / - merci d'avoir repéré ce @thelsdj :-)
nearora
16

Avertissement: je suis l'un des développeurs de Puppet.

La manière la plus évidente consiste simplement à appliquer les concepts: définir un cycle de développement / test / production, et pousser les changements à travers eux. Utilisez le contrôle de version pour suivre les systèmes.

En peu de temps, commencer dans cette voie conduit à découvrir que vous voulez vraiment des outils qui automatisent ces choses - essentiellement, que vous voulez automatiser l'administration des systèmes, afin de ne pas utiliser ces techniques sur les machines, vous les utilisez sur le système qui gère les machines.

Des outils comme Chef , Puppet , Salt et CFEngine sont tous des outils populaires pour répondre à ce deuxième besoin. Ils travaillent dans le sens général de transformer l'administration des systèmes en une solution centrale que vous pouvez contrôler et tester.

Le mouvement DevOps est une autre source de bonnes informations sur la façon de procéder. Si le précepte est une meilleure coopération entre les développeurs et le personnel d'exploitation, il tend également dans cette même direction.

Daniel Pittman
la source
15
Maintenant, nous savons qui harceler nos questions sur les marionnettes ...
ewwhite
1

Dans un monde Windows, ces problèmes liés à la gestion du cycle de vie des applications sont résolus avec System Center 2012.

Dans System Center Virtual Machine Manager (SCVMM), les services sont définis à l'aide de «modèles de service» (par exemple, un service classique à trois niveaux) et les environnements d'exécution sont définis comme des «nuages» (par exemple, développement, transfert, production). Les modèles de service peuvent être versionnés et déployés (de manière automatisée) sur différents Clouds. Sous les couvertures, SCVMM fait le travail pour approvisionner, déployer et configurer le matériel virtualisé (VM, etc.) et les logiciels (OS, composants d'application, etc.).

System Center Service Manager est l'élément qui relie cela d'un point de vue du processus. Par exemple, la gestion des problèmes et le contrôle des changements.

Richard B
la source