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é?
Il y a quelques arguments évidents contre cela.
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.
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é.
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 :).
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.
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.
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.
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.
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;
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.
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:
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.
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:
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.
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.
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.
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.
... 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.
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.
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.
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é.