Como automatizar implantações de produção sem sentir extrema ansiedade?


32

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?


'ls' depois de 'rm' uma vez me permitiu capturar uma empresa desastrosa que estava ocorrendo através de links físicos até lugares mais altos no sistema de arquivos. Conseguiu capturá-lo enquanto restava o sistema suficiente para recuperar os arquivos que já haviam sido excluídos (a exclusão de milhões de arquivos parece demorar um pouco, felizmente!). :-)
Brian Knoblauch

Respostas:


30

Existem alguns argumentos óbvios contra isso.

  1. 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.

  2. 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.

  3. 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 :).


21

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.


7
Talvez algo como criar seu próprio assistente, onde você pode disparar manualmente cada etapa. Uma saída de log é produzida com o máximo de detalhes que você precisa verificar antes de ir para a próxima etapa.
Jeffo

@JeffO Eu gosto dessa ideia! Acabamos de investir em uma boa ferramenta de construção da GUI Swing, que mastigo a cada desculpa para usá-la. Estou escolhendo as ferramentas da GUI mais rapidamente do que nunca, e um assistente visual seria algo tão bom que um desenvolvedor júnior poderia lidar com isso.
Maple_shaft

@maple_shaft E você fica tranquilo sabendo que a etapa em que eles copiam os arquivos corretos foi realizada no momento certo.
Jeffo

Eu concordo com isto. Algo tão simples quanto um arquivo em lotes (ou uma série deles) para fazer sua implantação, pois você pode aliviar bastante a tensão. Use arquivos em lote para garantir que você não cometa erros e execute o manual para garantir que não haja erros catastróficos durante a execução dos arquivos em lote.
Kibbee

4
@ Jeff O - eu gosto da idéia de registro. Isso cria rastreabilidade e também fornece ao maple algo para o controle de qualidade. Eu não gosto da ideia do mago. Quanto mais etapas forem necessárias para publicar seu produto em produção, maior a probabilidade de alguém estragar tudo. Apenas automatize tudo. Verifique com humanos.
usar o seguinte

15

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.


1
Eu gostaria de poder ter esse nível de confiança, mas não é a confiança nas ferramentas que evitam isso, é a confiança na qualidade do aplicativo que eu herdei e em sua natureza "Primadonna" após a implantação. É claro que o que você descreve é ​​o meu sonho molhado e é o jogo final que estou procurando.
Maple_shaft

@maple_shaft Sim, se for um aplicativo herdado com cobertura de teste inadequada, eu definitivamente posso ver querer fazer uma intervenção manual, especialmente se for conhecido por ser mimado.
Pewpewarrows

1
Um dos bons métodos de preparar o script é simplesmente registrar uma das implantações em um arquivo, entrada e saída e modificá-la para incluir a varredura da saída em busca de fatos que você verifica normalmente.
SF.

8

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.

  • Você não tem um bom log, o histórico do shell não conta
  • Ninguém mais sabe como fazê-lo
  • Passos perdidos
  • Às vezes, os cheques são feitos
  • Alguns itens a serem implantados podem perder, eu já fiz isso antes
  • Demora muito mais tempo
  • Você pode ser interrompido durante o processo

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.


7

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;

  • Prepare (e pratique no ambiente de integração) uma lista de verificação / conjunto de testes para descobrir rapidamente se funcionou e se algo der errado. O registro detalhado pode ajudar com isso.
  • Faça backup de tudo. Prepare e pratique uma reversão manual para que você possa se recuperar se der muito errado.
  • Teste o máximo que puder antes de realizá-lo em prod. Parece que você é um bom caminho junto com isso com seu ambiente de integração.
  • Na primeira vez em que você experimentá-lo, faça-o em um perfil baixo, com mudanças de baixo impacto. Algo como uma pequena atualização ou patch. A idéia é minimizar a precipitação se der errado. Não escolha uma atualização importante de alto nível (onde o CEO e todos os seus concorrentes estão assistindo) na sua primeira execução.

Depois de executar algumas execuções bem-sucedidas, sua confiança aumentará e logo você se perguntará como conseguiu fazer implantações manuais.


1
Eu acho que sua resposta é uma das melhores, porque na verdade trata da ansiedade, enquanto a maioria das outras respostas é fora de tópico, defendendo a implantação automatizada - cujos benefícios o OP já está ciente. Assim, sua resposta merece a recompensa!
user40989

4

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:

  • Não faça tudo de uma vez! Comece a escrever lentamente suas implantações automatizadas. Configure primeiro um ambiente de não produção separado e tente automatizar as implantações lá. Depois de adquirir confiança em suas implantações automatizadas, você pode começar a pensar em implantações de produção
  • Comece a liberar e implantar com muita frequência! É muito mais fácil fazer implantações automatizadas quando você não tem quatro meses de código aguardando lançamento. Libere pequenos recursos e correções de erros várias vezes por semana. Os benefícios desse estilo de versão não podem ser subestimados!
  • Confie em testes automatizados para garantir que seu ambiente de produção funcione. Novamente, isso leva tempo para se desenvolver, mas é muito importante. Testes automatizados são sempre melhores que testes de aceitação manual. Certamente, os testes de aceitação manual são bons, mas os testes automatizados podem ajudá-lo a saber se você deve implementar na produção ou não. Eles são a chave que permite todo esse processo de entrega automatizada e contínua. Se seus testes não passarem, você não deve implantar na produção.

3

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.


3

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.


3

Como automatizar implantações de produção sem sentir extrema ansiedade?

A extrema ansiedade que você sentiria ao automatizar implantações de produção é, provavelmente, baseada em duas crenças:

  1. 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.

  2. 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.


2

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.


O problema é que prod, staging e QA não estão parecendo iguais. Portanto, o script fará coisas diferentes em cada ambiente. Portanto, o script será testado pela primeira vez na produção.
Piotr Perak

Em seguida, configure um ambiente que você atualiza do Prod imediatamente antes de executar o script automatizado. Use-o para mais nada.
HLGEM

Eu não entendo Se ele pudesse configurar um ambiente parecido com o PROD, ele não teria nenhum problema.
Piotr Perak

1

... devido a restrições de hardware e recursos, nosso ambiente de integração não é um ambiente de 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!)

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.

  • Em um dos projetos, eu os ajudava na implantação como representante da equipe de desenvolvimento. Antes da implantação, eles estavam revisando minhas instruções e, durante a implantação, eu estava sentado online pronto para consultar se algo desse errado. Naquela época, aprendi a apreciar essa separaçã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.

Obrigado, é bom ouvir alguém que sabe como é isso. Escusado será dizer que somos muito pequenos para garantir uma equipe de criação que lida com nossas implantações de produção. Quando você trabalha em uma startup, aprende a usar 20 chapéus diferentes muito rapidamente e nem sempre tenho o luxo de "foco". Eu acho que vou escrever um script robusto de implantação e verificação para minha sanidade. Pela primeira vez em algum tempo, tenho uma pausa de duas semanas entre projetos, onde posso fazer algo assim.
maple_shaft

script de verificação que eu vejo. Bem, dada a sua situação, essa parece ser a melhor coisa depois da equipe de criação dedicada. Pergunto-me, você realmente não tem opção para testar a implantação na instalação de dois servidores? mesmo se você pular o balanceador de carga, apenas para testar se ambos os URLs mestre / escravo respondem?
gnat 13/10

1

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.


1
  1. Simplificar. Seu processo de alteração deve ser arquivos rsync, executar script SQL, nada mais.
  2. Automatizar.
  3. Teste.

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.


0

É 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.

  1. Retroceda de forma confiável para a versão anterior.
  2. Obtenha uma confirmação positiva de que a implantação foi aplicada com êxito e está respondendo ao tráfego válido.
  3. Tenha ambientes comparáveis ​​para desenvolvimento e controle de qualidade que também usem os mesmos scripts.

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.


-2
  1. abra uma janela maior para implantação pela primeira vez se algo der errado
  2. 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.


isso não responde à pergunta: "Quais são os argumentos contra esses argumentos OR para a implantação automática da produção com script?"
mosquito
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.