web-dev-qa-db-fra.com

Comment puis-je automatiser les déploiements de production sans vivre une anxiété extrême?

Dans notre boutique, nous utilisons SVN pour le contrôle de source et Cruisecontrol pour CI sur la gestion des bâtiments et des déploiements automatiques dans nos environnements de développement, de test et d'intégration.

Tout cela fonctionne correctement en douceur en raison de contraintes matérielles et de ressources, notre environnement d'intégration n'est pas un environnement équilibré de la charge de 2 serveurs, comme notre environnement de production. Bien que tout le reste soit égal à ce serait la seule différence entre nos environnements d'intégration et de production (bien qu'un grand!)

Théoriquement, la différence est une configuration légèrement différente de nos serveurs d'applications et que le script de déploiement devrait simplement déposer les artefacts de construction en deux serveurs au lieu de celui-ci, mais pourquoi suis-je si nerveux d'automatiser nos déploiements de production ?!

Je ne suis généralement pas un freak de contrôle, mais je ressens toujours la nécessité insatiable de déployer la production pour la production manuellement. J'ai entendu des collègues que c'est généralement une vraiment mauvaise chose ™ mais ils n'ont pas réussi à faire une affaire contre elle.

Je sais que lorsque je le fais manuellement, je peux voir que je suis en train de copier physiquement les fichiers corrects, je ferme physiquement les serveurs d'applications et en veillant à ce qu'ils soient fermés avec succès, je démarre physiquement les serveurs de sauvegarde puis à l'inspection physiquement des journaux pour faire Bien sûr, il a commencé bien et le déploiement a réussi. Cela me donne une tranquillité d'esprit.

Quels sont les arguments contre ces arguments OR _ arguments pour le déploiement automatique de la production scripté?

33
maple_shaft

Il y a quelques arguments évidents contre cela.

  1. Que se passe-t-il si vous partez? Toutes ces informations sont-elles soigneusement documentées, ou est-ce principalement dans votre tête. Les scripts automatisés sont un endroit bien meilleur pour quelqu'un d'autre à prendre part.

  2. Tout le monde fait des erreurs. Il arrivera un moment où la personne qui fait le déploiement est fatiguée, ne prêtant pas attention à ce que ce soit. Oui Idéalement, les déploiements sont seulement effectués dans un endroit calme heureux avec beaucoup de temps. En pratique, ils peuvent être précipités et stressés en essayant de déployer des corrections urgentes. C'est le temps le plus probable pour commettre une erreur, ainsi que le plus coûteux. Si le déploiement est un script unique, le potentiel d'erreurs est limité.

  3. Temps. Comme les déploiements deviennent plus compliqués le montant qui nécessite une augmentation des augmentations. Les scripts nécessitent juste un coup de pied, une vérification manuelle, puis un commutateur manuel (vous pouvez l'automatiser également, mais je partage une partie de la paranoïa :).

31
Luke Graham

Vous pouvez tirer le meilleur parti des meilleurs mondes: la tranquillité d'esprit avec la vérification du processus et la fiabilité de l'automatisation.

Script le déploiement. Ensuite, passez et vérifiez manuellement que les processus sont démarrés, les fichiers supprimés, etc. En d'autres termes, écrivez votre propre script QA pour vérifier que les étapes automatisées 1 - x ont réellement eu lieu.

21
P.Brian.Mackey

Je pense que la clé ici est: pourquoi pensez-vous que vous ne pouvez pas scripter du processus de vérification?

Mes scripts de déploiement ne font que pousser les archives et redémarrer des services. Ils immettent beaucoup d'informations codées par couleur au cours de chaque étape du déploiement et fournissent-moi un résumé des événements à la fin. Cela me permet de savoir que les processus sont opérationnels, que la page d'accueil servait un code de statut 200 et que toutes les machines et services peuvent se voir bien. J'ai ensuite un service séparé qui ne fait pas partie du script qui surveille les fichiers journaux, les erreurs de niveau 4xx et 5xx et les métriques de site clés. Il passe ensuite à crier sur moi à travers tous les moyens possibles (e-mail, msg txt et alarmes) s'il existe des pointes radicales-effets négatifs.

Entre les tests de fonctionnement des serveurs CI et de CI, je déploie littéralement à ce niveau d'automatisation. Je ne parcss même pas une seule page sur le site après une poussée à cause de la fiabilité du processus maintenant, ce qui me permet non seulement de déployer aussi souvent que je le souhaite, mais permet à un nouveau développeur sur le projet faire une mise à jour de la Live. site en quelques minutes après venir à bord. Dans le passé, j'ai même fait que les serveurs CI déploient automatiquement à la production après un engagement à une branche principale/coffre qui transmet tout. C'est à quel point je suis confiant dans mes outils.

Vous devriez être aussi.

15
Pewpewarrows

Exécutez-vous également vos machines de production avec un débogage à distance et vous les entrez manuellement? Construire un script approprié est identique à la rédaction d'un programme. Toutes les problèmes que vous avez indiquent des choses qu'il aura besoin de surveiller et de vérifier.

Si quelque chose ne va pas, cela devrait passer à des procédures de restauration appropriées et vous envoyer un message. Tout ce qui se passe peut être enregistré pour plus tard. Vous pouvez contrôler les scripts et configurer des cas de test.

Mais si vous courez manuellement des commandes, vous n'avez aucun de ces avantages. Vous avez plutôt une liste d'inconvénients.

  • Vous n'avez pas de bon journal, l'histoire de Shell ne compte pas
  • Personne d'autre ne sait comment faire
  • Les marches sont manquées
  • Les chèques ne sont parfois parfois faits
  • Certains articles à déployer peuvent être manqués, je l'ai fait avant
  • Il faut beaucoup plus de temps
  • Vous pouvez être interrompu pendant le processus

Un script approprié doit être presque identique à si vous avez tout saisi sur la coquille. C'est l'une des raisons pour lesquelles nous avons des scripts Bash. Si vous faites confiance aux choses que vous faites, pourquoi ne pouvez-vous pas tout enregistrer et resserrer? Meilleure vérification, vérification plus rapide, plus de vérification peut se produire car l'ordinateur le fait.

8
Spencer Rathbun

Je peux comprendre d'être un peu nerveux à essayer quelque chose de nouveau sur l'environnement de prod. Se méfier du désastre potentiel est une bonne choseTM.

Script automatisé est aussi une bonne choseTM et aussi longtemps que vous l'approchez avec précaution, vous devriez être en mesure de minimiser le danger et réduire votre peur. Donc, mon conseil est le suivant;

  • Préparer (et pratique sur l'intégration env) une liste de contrôle/série de tests afin que vous puissiez rapidement savoir si cela a fonctionné et si quelque chose allait mal. L'exploitation forestière peut aider verbeux à ce sujet.
  • Sauvegardez tout. Préparer et mettre en pratique une rétrogradation manuelle afin que vous puissiez récupérer si elle tourne mal.
  • Test autant que vous pouvez avant de le faire pour de vrai sur prod. On dirait que vous êtes une bonne façon avec ce avec votre env d'intégration.
  • La première fois que vous l'essayez, faites-le sur un profil bas, le changement à faible impact. Quelque chose comme une mise à jour mineure ou patch. L'idée est de minimiser les conséquences si elle va mal. Ne choisissez pas un haut profil mise à jour majeure (où le chef de la direction et tous vos concurrents regardent) pour votre première course.

Une fois que vous avez quelques courses avec succès sous votre ceinture votre confiance grandira et bientôt vous vous demanderez comment vous avez pu faire les déploiements manuels.

7
Qwerky

Voici le plus gros argument contre les déploirs manuels à la production: vous êtes un humain et fera des erreurs. Il y aura sans aucun doute des moments où vous oublierez de faire quelque chose qui vous causera du chagrin. Un déploiement automatisé bien écrit n'a pas la même tendance. Il est vrai que vous pouvez toujours avoir des déploiements de production en désordre, mais c'est parce que votre déploiement automatisé propose des bogues qui doivent être résolus.

D'après mon expérience, les avantages des déployants automatisés pour la production sont énormes. Le plus grand est que vous vous amusez à vous amuser le week-end au lieu d'essayer de marcher à travers un processus de déploiement manuel qui ne coopérera pas.

Cela dit, voici quelques points clés pour automatiser vos déploiements de production:

  • Ne fais pas tout cela à la fois! Commencez lentement écrire vos déploiements automatisés. Configurez d'abord un environnement de non-production distinct et essayez de vous automatiser les déploiements. Une fois que vous avez renforcé la confiance dans vos déploiements automatisés, vous pouvez commencer à penser à effectuer des déploiements de production.
  • commencer à libérer et à déployer très fréquemment! Il est beaucoup plus facile de faire des déploiements automatisés lorsque vous n'avez pas 4 mois de code en attente d'être publié. Libérez de petites fonctionnalités et des corrections de bugs plusieurs fois par semaine. Les avantages de ce style de libération ne peuvent pas être sous-estimés!
  • s'appuyer sur des tests automatisés pour vous donner confiance que votre environnement de production fonctionnera. Encore une fois, cela prend du temps à l'accumulation, mais est très important. Les tests automatisés sont toujours meilleurs que les tests d'acceptation manuelle. Bien sûr, les tests d'acceptation manuelle sont corrects, mais les tests automatisés peuvent vous aider à savoir si vous devez vous déployer dans la production ou non. Ce sont la clé qui permettent tout ce processus de livraison continue automatisée. Si vos tests ne réussissent pas, vous savez de ne pas se déployer dans la production.
4
dsw88

Exécutez les scripts sur le serveur LIVE. Cela fonctionnera et, après l'avoir vu, cela fonctionnera bien à quelques reprises, vous serez parfaitement confiant.

Sérieusement, vous êtes plus susceptible de faire des erreurs que le script de déploiement.

3
Paul T Davies

Comment puis-je automatiser les déploiements de production sans éprouver l'anxiété extrême?

L'anxiété extrême vous l'expérience lors de l'automatisation des déploiements de production est, très probablement, basé sur deux croyances:

  1. Un jour ou l'autre, une étape de déploiement échouera et vous ou un autre être humain est capable de récupérer rapidement de l'échec alors qu'un script automatisé pourrait l'ignorer.

  2. Un échec négligé dans la production a des conséquences dramatiques.

Il y a peu on peut faire 2, en plus d'échecs en évitant, alors laissez-nous concentrer sur 1.

Une solution pas cher en légère amélioration sur l'existant serait d'utiliser une procédure de déploiement semi-automatique, en attente de validation à la fin de chaque étape de l'installation. Avec une solution semi-automatique vous profiter des avantages d'une solution entièrement automatique, comme la cohérence et la reproductibilité, alors que vous aurez toujours la chance de suivre et récupérer progrès des erreurs que vous êtes habitué.

Le script semi-automatique et son biotope (tests de régression, etc.) pourraient également servir de véhicule pour la connaissance que vous recueillez sur les échecs qui se produisent dans la procédure d'installation et les moyens de récupérer d'eux.

3
user40989

Les ordinateurs ne font pas d'erreur, les gens font.

Écrivez votre script une fois et vérifiez-le bien, passez à travers la ligne de la ligne. À partir de ce moment-là, vous pouvez être sûr que chaque fois que vous déployez, cela fonctionnera.

Faites-le à la main et vous êtes tenu de faire des erreurs. Peut-être que vous avez écrit, tout ce que vous avez à faire, mais c'est oh si facile de commettre une erreur. Vous devez copier tous les fichiers sauf le fichier web.config? Vous pouvez parier que un jour vous écraserez. Un script ne fera jamais cette erreur.

3
Carra
  1. Simplifier. Votre processus de modification doit être des fichiers RSYNC, exécuter SQL Script, rien de plus.
  2. Automatiser.
  3. Test.

La raison d'automatiser est d'obtenir quelque chose qui est essentiel, reproductible et que vous pouvez faire confiance au travail correctement dans chaque situation attendue.

Vous devez toujours avoir un plan de retour, comme pour tout changement dans n'importe quel contexte, et il devrait également être automatisé.

Vous voudrez toujours observer le processus car cela se produit si l'environnement est vraiment sensible, mais ne le faites jamais manuellement car il ne peut tout simplement pas être reproduit.

1
Morg.

... En raison de contraintes de matériel et de ressources Notre environnement d'intégration n'est pas un environnement équilibré de la charge de 2 serveurs, comme notre environnement de production. Bien que tout le reste soit égal à ce serait la seule différence entre nos environnements d'intégration et de production (bien qu'un grand!)

Compte tenu ci-dessus, je serais probablement aussi anxieux que vous.

J'ai une fois examiné et tester du script automatisé qui se déploie sur SLB et que mon sentiment est que, sans pré-tester à la configuration équilibrée de la charge Je préférerais faire des choses manuellement.


Outre la configuration des tests prodhants, une autre chose qui a eu un impact significatif sur ma tranquillité d'esprit est que le déploiement de produit a été fait par autre équipe que les développeurs - par les gars dont le seul travail était de maintenir l'environnement de production.

  • Dans l'un des projets, je les aidais dans le déploiement en tant que représentant de l'équipe de Dev. Avant le déploiement, ils examinaient mes instructions et pendant le déploiement, je suis juste assis en ligne prêt à consulter si les choses vont mal. À l'époque, j'ai appris à apprécier cette séparation .

    [.____ La grande différence était en train de se concentrer. Je veux dire, ma tête est toujours chargée par des trucs "principaux" - codage, débogage, nouvelles fonctionnalités - il y a juste trop de distractions pour se concentrer correctement sur le déploiement. Contrairement à cela, leur Les éléments principaux étaient juste une maintenance de la production et ils se sont concentrés sur cela.

    [.____] C'est incroyable de combien de meilleur cerveau fonctionne lorsqu'il est concentré. Ces gars-là, ils étaient tellement plus attentifs, ils ont fait beaucoup moins d'erreurs que moi. Ils savaient juste que ça va mieux que moi. Ils m'ont même appris une chose ou deux qui rendent mes propres déploiements de test plus facilement.
1
gnat

Construisez un script de déploiement que vous utilisez pour déplacer votre code dans n'importe quel environnement. Nous utilisons exactement le même processus de déploiement pour déplacer le code sur Dev, QA, la mise en scène et enfin la production. Depuis que nous déployons plusieurs fois par jour à Dev et quotidiennement à QA, nous avons gagné la confiance que les scripts de déploiement sont corrects. Fondamentalement, testez l'enfer en l'utilisant souvent.

1
Andy

Il est tout à fait possible d'utiliser des scripts d'automatisation à déployer dans des environnements de production. Cependant, pour faire de manière fiable, vous devez pouvoir faire plusieurs choses.

  1. Retournez de manière fiable à la version précédente.
  2. Obtenez une confirmation positive que le déploiement a été appliqué avec succès et répond au trafic valide.
  3. Avoir des environnements comparables pour le développement et l'assurance qualité qui utilisent également les mêmes scripts.

Il y a des avantages aux scripts, tels qu'ils ne manqueront jamais une commande parce que son 2h du matin, et sa fatigue.

Cependant, les scripts peuvent et vont toujours échouer. Parfois, la défaillance est dans la conception du script, mais elle pourrait également être causée par un réseau ou une panne de courant, un système de fichiers corrompu, à court de mémoire .....

C'est pourquoi il est important qu'après la course du script, une phase de test définie est également suivie que vérifie que le nouveau déploiement est en place, en cours d'exécution et de manipulation, avant que le trafic en direct soit activé.

0
Michael Shaw