Em nossa loja, usamos o SVN para controle de origem e o CruiseControl for CI para lidar com construções e implantações automáticas em nossos ambientes de desenvolvimento, teste e integração.
Tudo isso funciona sem problemas, no entanto, devido a restrições de hardware e recursos, nosso ambiente de integração não é um ambiente com 2 servidores com balanceamento de carga, como o nosso ambiente de produção. Embora todo o resto seja igual, essa seria a única diferença entre nossos ambientes de integração e produção (embora seja grande!)
Teoricamente, a diferença é uma configuração ligeiramente diferente dos nossos servidores de aplicativos, e o script de implantação apenas precisaria soltar os artefatos de construção em dois servidores, em vez de apenas um, mas por que estou tão nervoso em automatizar nossas implantações de produção ?!
Geralmente não sou maníaco por controle, mas sempre sinto a necessidade insaciável de implantar a produção manualmente. Ouvi dos colegas que isso geralmente é uma coisa realmente ruim, mas eles não conseguiram se defender.
Sei que, quando faço isso manualmente, POSSO VER que estou copiando fisicamente os arquivos corretos, desligando fisicamente os servidores de aplicativos e garantindo que eles sejam fechados com êxito, iniciando o backup dos servidores e inspecionando fisicamente os logs para criar Certifique-se de que tenha iniciado bem e de que a implantação foi bem-sucedida. Isso me dá uma paz de espírito.
Quais são os argumentos contra esses argumentos OR para a implantação automática da produção com script?
fonte
Respostas:
Existem alguns argumentos óbvios contra isso.
O que acontece se você sair. Todas essas informações são cuidadosamente documentadas ou estão principalmente na sua cabeça. Os scripts automatizados são um lugar muito melhor para alguém substituir.
Todo mundo comete erros. Chegará um momento em que a pessoa que está realizando a implantação está cansada, sem prestar atenção. Sim, o ideal é que as implantações sejam feitas apenas em um local calmo e feliz com muito tempo. Na prática, eles podem ser apressados e estressados ao tentar lançar correções urgentes. Este é o momento mais provável de cometer um erro e também o mais caro. Se a implantação for um único script, o potencial de erros será limitado.
Tempo. À medida que as implantações ficam mais complicadas, aumenta a quantidade necessária. Os scripts exigem apenas o início, uma verificação manual e, em seguida, uma troca manual (você pode automatizar isso também, mas eu compartilho parte da paranóia :).
fonte
Você pode obter o melhor dos melhores mundos: tranqüilidade com a verificação do processo e a confiabilidade da automação.
Script da implantação. Em seguida, verifique e verifique manualmente se os processos foram iniciados, os arquivos removidos etc. Em outras palavras, escreva seu próprio script de controle de qualidade apenas para verificar se as etapas automatizadas 1 a X realmente ocorreram.
fonte
Eu acho que a chave aqui é: por que você acha que não pode escrever o processo de verificação?
Meus scripts de implantação não apenas enviam arquivos e reiniciam os serviços. Eles imprimem muitas informações codificadas por cores durante cada etapa da implantação e fornecem um resumo dos eventos no final. Ele me informa que os processos estão em funcionamento, que a página inicial está servindo um código de status 200 e que todas as máquinas e serviços podem se ver bem. Em seguida, tenho um serviço separado que não faz parte do script que monitora arquivos de log, erros nos níveis 4xx e 5xx e métricas principais do site. Em seguida, ele grita comigo através de todos os meios possíveis (e-mail, txt msg e alarmes) se houver picos drásticos de efeito negativo.
Entre isso e os servidores de CI que executam testes, eu literalmente implanto e esqueço neste nível de automação. Eu nem sequer navego em uma única página no site depois de um empurrão devido à confiabilidade do processo agora, o que não só me permite implantar quantas vezes eu quiser, mas também permite que um novo desenvolvedor do projeto faça uma atualização ao vivo minutos após o embarque. No passado, eu até fiz os servidores de CI implantarem automaticamente na produção após uma confirmação em uma ramificação mestre / tronco que passa tudo. É assim que estou confiante em minhas ferramentas.
Você deveria estar também.
fonte
Você também executa suas máquinas de produção com depuração remota e as percorre manualmente? Construir um script adequado é idêntico a escrever um programa. Todos os problemas que você indica indicam coisas a serem observadas e verificadas.
Se algo der errado, ele deve passar pelos procedimentos adequados de reversão e enviar uma mensagem. Tudo o que acontece pode ser registrado para mais tarde. Você pode controlar a versão dos scripts e configurar os casos de teste.
Mas se você estiver executando comandos manualmente, não terá nenhuma dessas vantagens. Você tem uma lista de desvantagens.
Um script adequado deve ser quase idêntico se você digitar tudo no shell. Essa é uma das razões pelas quais temos scripts bash. Se você confia no que faz, por que não consegue gravar tudo e apertar tudo? Verificações melhores, verificações mais rápidas e mais verificações podem acontecer porque o computador faz isso.
fonte
Eu posso entender estar um pouco nervoso tentando algo novo no ambiente de prod. Desconfiar de possíveis desastres é uma Good Thing TM .
O script automatizado também é uma Good Thing TM e, desde que você o faça com cuidado, você poderá minimizar o perigo e diminuir o medo. Então, meu conselho é este;
Depois de executar algumas execuções bem-sucedidas, sua confiança aumentará e logo você se perguntará como conseguiu fazer implantações manuais.
fonte
Aqui está o maior argumento contra implantações manuais na produção: você é humano e cometerá erros. Sem dúvida, haverá momentos em que você esquecerá de fazer algo que lhe causará pesar. Uma implantação automatizada bem escrita não tem a mesma tendência. É verdade que você ainda pode ter implantações de produção confusas, mas isso ocorre porque sua implantação automatizada possui bugs que precisam ser resolvidos.
Na minha experiência, os benefícios das implantações automatizadas na produção são enormes. O maior deles é que você se diverte nos fins de semana, em vez de tentar avançar em um processo de implantação manual que não irá cooperar.
Dito isto, aqui estão alguns indicadores importantes para automatizar suas implantações de produção:
fonte
Execute os scripts no servidor ativo. Ele funcionará e, depois de vê-lo funcionar bem algumas vezes, você estará perfeitamente confiante.
Sério, porém, é mais provável que você cometa erros do que o script de implantação.
fonte
Computadores não cometem erros, as pessoas cometem.
Escreva seu script uma vez e verifique-o minuciosamente, passe por linha. A partir de então, você pode ter certeza de que toda vez que implantar, ele funcionará.
Faça à mão e você cometerá erros. Talvez você tenha escrito tudo o que precisa fazer, mas é tão fácil cometer um erro. Você precisa copiar todos os arquivos, exceto o arquivo web.config? Você pode apostar que algum dia você o substituirá. Um script nunca cometerá esse erro.
fonte
A extrema ansiedade que você sentiria ao automatizar implantações de produção é, provavelmente, baseada em duas crenças:
Um dia ou outro, alguma etapa de implantação falhará e você ou outro ser humano poderá se recuperar rapidamente da falha, enquanto um script automatizado pode ignorá-la.
Uma falha negligenciada na produção tem consequências dramáticas.
Há pouco o que se pode fazer sobre 2., além de evitar falhas, então vamos nos concentrar em 1.
Uma solução barata que melhorasse um pouco a existente seria usar um procedimento de implantação semiautomático, aguardando a validação no final de cada etapa da instalação. Com uma solução semi-automática, você desfrutaria dos benefícios de uma solução totalmente automática, como consistência e reprodutibilidade, enquanto ainda terá a chance de monitorar os progressos e recuperar os erros como está acostumado.
O script semi-automatizado e seu biótopo (testes de regressão etc.) também podem servir como veículo para o conhecimento que você está coletando sobre falhas que ocorrem no procedimento de instalação e maneiras de se recuperar deles.
fonte
O que eu gosto é que você pode testar a implantação no teste ou no controle de qualidade e saber que, quando executá-lo no prod, ocorrerão exatamente as mesmas etapas.
Quando você faz isso manualmente, é mais fácil esquecer uma etapa ou executá-la fora de ordem.
fonte
Dado acima, eu provavelmente ficaria tão ansioso quanto você.
Certa vez, analisei e testei o script automatizado que é implementado no SLB e sinto que, sem pré-teste na configuração com balanceamento de carga, prefiro fazer as coisas manualmente.
Além da configuração de teste semelhante a um prod, outra coisa que teve um impacto significativo em minha paz de espírito é que a implantação do prod foi feita por outra equipe que desenvolvedores - por caras cujo único trabalho era manter o ambiente de produção.
Não que eles fossem mais rápidos (por que iriam? Eu testei implantações 5x a 10x com mais frequência do que elas). A grande diferença estava em foco. Quero dizer, minha cabeça está sempre carregada de coisas "principais" - codificação, depuração, novos recursos - há distrações demais para se concentrar adequadamente na implantação. Ao contrário disso, seus principal era apenas a manutenção da produção e eles estavam focados nisso.
É incrível o quanto o cérebro funciona melhor quando focado. Esses caras, eles eram muito mais atenciosos, cometeram muito menos erros do que eu. Eles apenas sabiam isso melhor do que eu. Eles até me ensinaram uma coisa ou duas que facilitaram minhas implantações de teste.
fonte
Crie um script de implantação que você usa para mover seu código para qualquer ambiente. Usamos exatamente o mesmo processo de implantação para mover o código para desenvolvimento, qa, preparação e, finalmente, produção. Como implantamos várias vezes por dia no desenvolvedor e diariamente no controle de qualidade, ganhamos confiança de que os scripts de implantação estão corretos. Basicamente, teste o inferno usando-o frequentemente.
fonte
O motivo para automatizar é obter algo que possa ser testado, repetível e que você possa confiar para funcionar corretamente em todas as situações esperadas.
Você ainda precisa ter um plano de recuperação, como para qualquer mudança em qualquer contexto, e ele deve ser automatizado também.
Você ainda vai querer observar o processo como acontece se o ambiente for realmente sensível, mas nunca faça isso manualmente, pois não pode ser reproduzido.
fonte
É inteiramente possível usar scripts de automação para implantar em ambientes de produção. No entanto, para fazer isso de maneira confiável, você precisa ser capaz de fazer várias coisas.
Existem algumas vantagens nos scripts, como eles nunca perderão um comando porque são 2 da manhã e estão cansados.
No entanto, os scripts podem e ainda falharão. Às vezes, a falha ocorre no design do script, mas também pode ser causada por uma falha de rede ou energia, sistema de arquivos corrompido, falta de memória ...
É por isso que é importante que, após a execução do script, também seja seguida uma fase de teste definida que verifique se a nova implantação está ativa, executando e manipulando solicitações, antes que o tráfego ativo seja ativado.
fonte
Divida o processo de implantação em duas partes. uma. Backup (manual) - isso lhe dará confiança se algo der errado durante a implantação
b. Implantação (automatizada)
quando você puder implantar com confiança pela primeira vez. você também pode automatizar o processo de backup.
fonte