Como fazer a redução de incidentes em sistemas pós Deploy?
O momento de realizar o deploy de uma aplicação pode ser um tormento para o desenvolvedor e toda a equipe quando algo não sai como o esperado, gerando erros, correria e estresse.
O deploy, também conhecido como publicação, é quando enviamos para o servidor atualizações de arquivos e configurações de uma aplicação, que podem reagir ou não, conforme o ambiente de testes.
Durante esse processo, vários erros podem vir a acontecer e prejudicar a atividade, gerando atrasos e dores de cabeça. O objetivo deste post é exatamente evitar isso. Continue conosco e confira!
Os principais tipos de incidentes pós Deploy
São vários os problemas que podem surgir ou serem gerados por uma rotina de deploy mal realizada, sendo que muitas vezes pode levar algum tempo para a situação ser identificada, o que prejudica a reversão. Dentre os erros mais comuns podemos citar alguns abaixo.
Arquivos de configuração
Um erro muito comum e que pode derrubar uma aplicação no servidor, levando algum tempo até se descobrir qual o problema ocorrido é a atualização de arquivos de configuração da produção com informações de ambiente de testes.
Por exemplo, qualquer aplicação pode utilizar-se de vários tokens de acesso para integração com API’s ou, até mesmo, usuários e senhas de banco de dados diferentes no ambiente de produção e de testes.
Ao atualizar algum arquivo de configuração com as informações equivocadas, é possível prejudicar o funcionamento da aplicação, pois ela deixará de conseguir se comunicar com outros sistemas fundamentais para o seu funcionamento.
Por meio de ferramentas de controle de versão como o Git, é possível evitar a atualização desses arquivos, garantindo a integridade da versão em produção, mesmo que algo tenha sido alterado no desenvolvimento.
Falta de testes
Infelizmente, o desenvolvedor pode acabar sendo pressionado para entregar códigos com rapidez, e isso implica na publicação de atualizações sem os devidos testes. Esse tipo de situação pode prejudicar e muito a aplicação, que passa a apresentar erros aos usuários durante a utilização do sistema.
Como são questões pontuais, elas podem acabar custando a serem visualizadas, prejudicando o encontro da atualização que gerou o erro e sua correção. No entanto, podemos contar com ferramentas como Jenkins, que permite não apenas gerenciar pacotes dentro de um servidor, mas também criar uma série de testes automatizados, garantindo que todas as funcionalidades sejam revistas antes de um deploy.
Atualização do banco de dados
A depender das funções a serem incluídas durante uma publicação, será necessário realizar alterações também em banco de dados, seja na criação de novas tabelas, seja na alteração de informações já existentes. O principal problema ocorre quando vários desenvolvedores agem levando em conta as mesmas tabelas de banco, e desconhecem as demandas de alteração uns dos outros.
Dessa forma, ao realizar o deploy e mudar determinados pontos do banco de dados, outras funcionalidades podem acabar sendo afetadas ou, até mesmo, os próximos deploys. Por conta disso, uma gestão de código eficiente, com a utilização de Scrum e Kanban, é fundamental para que todos tenham noção do que os outros desenvolvedores estão fazendo e, como isso, o que pode afetar seu trabalho.
Falta de backup
A principal solução para um deploy mal planejado ou executado é reverter as alterações ou lançar mão de um backup. Contudo, boa parte das empresas não utiliza esse tipo de saída. Quando acontece um erro é comum que eles busquem a correção com outro deploy, que pode sanar um problema e acabar gerando outro, muito pior.
Desse modo, realizar um backup antes de fazer um deploy é essencial para garantir a reversão no caso do surgimento de qualquer problema e evitar o desespero de uma correção imediata.
O papel das ferramentas DevOps
Mesmo que algumas empresas insistam em realizar deploys de forma manual, existem diversas ferramentas Devops para esse fim, permitindo a criação de processos muito mais maduros e confiáveis. O problema de se fazer tudo manualmente são as chances de isso acabar dando errado, além da dependência que a empresa cria pela pessoa que roda o deploy. Geralmente apenas um dev faz isso, e quando essa figura sai da empresa, existe um grande problema.
Uma solução é o uso das ferramentas DevOps, que permitem a automatização de boa parte dos processos, otimizando assim as entregas contínuas de software e evitando que a saída de um colaborador prejudique os futuros deploys.
As ferramentas de monitoramento de logs
Além de automatizar a publicação de atualizações, outro ponto é muito importante para garantir a consistência dos deploys e, caso haja algum erro, ter uma rápida resposta, entendendo o que aconteceu e agindo para corrigir. São as ferramentas de log, que permitem salvar em um arquivo simples todo e qualquer erro que tenha acontecido com a aplicação, permitindo encontrar rapidamente qual o problema ocorrido.
Dessa forma, mesmo que um deploy tenha dado errado, gerando erros na aplicação, fica muito mais simples encontrar o problema, bastando verificar o log do sistema. Trouxemos dois exemplos.
Kibana
O Kibana é uma ferramenta incrível, possibilitando a criação de dashboards dinâmicos que permitem uma visualização completa acerca do desempenho de uma aplicação e fugindo da visão simples de um arquivo de logs. É possível criar vários tipos de gráficos que vão ajudar você a identificar qualquer mudança perceptível no desempenho de sua aplicação após um deploy e verificar qual a causa dos problemas.
Fluentd
O Fluentd é uma ferramenta Open Source que garante a coleta de logs diários de diversas aplicações ao mesmo tempo, tendo a capacidade de processar a entrada de mais de 5 TB de dados diariamente. Seu principal diferencial é o desempenho e é utilizado por empresas que precisam gerenciar vários servidores diferentes, com aplicações variadas e querem unificar a gestão de logs.
A importância de seguir as melhores práticas no Deploy
Além das orientações repassadas acima, não podemos deixar de dizer que para fazer um deploy seguro e sem problemas, sempre é necessário lançar mão das boas práticas. Entre elas estão:
- automatização de testes;
- uso de ferramentas;
- construção de um build automatizado;
- uso de ambientes robustos e corretamente configurados;
- políticas de deploy claras;
- controle de versões;
- treinamento dos desenvolvedores.
Temos a certeza de que as dicas e informações repassadas neste post vão ajudar você a melhorar a sua rotina de deploy e deixar de sofrer com erros em suas aplicações.
A GAEA conta com os melhores profissionais do mercado e podemos ajudar você a montar uma rotina de deploy com as ferramentas certas. Entre em contato conosco agora mesmo!