Skip to main content

Command Palette

Search for a command to run...

Por que o Slot de QA não é mais o lugar certo para o Rollback

Updated
5 min read
Por que o Slot de QA não é mais o lugar certo para o Rollback
V
Documentando o que faço, resolvo e quebro. Foco total em problemas reais e no passo a passo da investigação. Escrevo para organizar como minha mente pensa diante dos problemas e deixo aberto para quem quiser acompanhar.

Chegou mais uma segunda-feira, dia de entrega, e com ela, a rotina de deploy. Nosso processo padrão envolve subir a nova versão em QA e, em seguida, fazer o swap para produção. Simples, certo? Não exatamente. Acontece que o ambiente de QA, que deveria ser um espelho da produção para validação final, começou a ser usado para testes diversos, por diferentes equipes. Isso significa que, no momento crucial do swap, a versão que esperávamos encontrar em QA para garantir um rollback seguro, muitas vezes, já não era a versão estável que havíamos validado. Uma dor de cabeça que precisava ser resolvida antes que se tornasse um problema maior.


O problema

A dor era clara: a falta de um ambiente imutável para rollback. Nosso processo de deploy, que dependia do ambiente de QA para um swap seguro, estava vulnerável. Se algo desse errado em produção, a versão em QA poderia não ser a versão estável anterior, impossibilitando um rollback rápido e seguro. Precisávamos de um "porto seguro", um slot de deploy que guardasse a versão estável da produção, intocável, para qualquer eventualidade.


A investigação

Minha primeira dedução foi que precisávamos de um novo slot de implantação, dedicado exclusivamente para ser um fallback. Sem rota configurada, sem uso para testes, apenas um guardião da versão estável. A jornada começou na Azure, nosso provedor de serviços em nuvem. Naveguei até o App Service, onde nossas aplicações residem, e então para os slots de implantação da aplicação em questão. Tudo via interface gráfica, um legado que ainda estamos trabalhando para modernizar com IaC, mas que, por enquanto, é o caminho.

Criei o slot e o batizei de fallback. A ideia era que ele serviria apenas para subir a versão nova e fazer o swap para produção. Em caso de necessidade de rollback, ele estaria lá, imutável, com a versão que estava em produção antes do deploy. Parecia um plano sólido.

Com o slot criado, o próximo passo era ajustar o Azure DevOps. Nossas configurações de swap ainda apontavam para QA, e isso precisava mudar. Fui em Releases, selecionei a release que estávamos trabalhando (ainda em modo clássico, outro ponto para futuras melhorias com YAML) e cliquei em editar. Para agilizar, clonei o stage de deploy para QA, mas o deixei sem trigger, para ser executado apenas manualmente. O ponto crucial aqui foi trocar o Slot de QA para fallback.

Em seguida, na task que realiza o swap para produção, alterei o Source Slot de QA para fallback. Confirmei que o checkbox Swap with Production estava ativo. Nesse momento, senti que estávamos no caminho certo. Salvei as alterações e o trabalho, por enquanto, estava feito. Agora era esperar a próxima entrega para validar se tudo funcionaria como o esperado.

Chegou a segunda-feira, dia da entrega. 8:40 da manhã, o deploy agendado para as 09:00. Dei uma última lida na documentação que havíamos feito, para me certificar de que não havia esquecido de nada. O plano era claro: verificar a versão em produção, subir a nova versão no slot fallback, fazer o swap para produção e, por fim, verificar se a versão havia sido trocada. Acontece kkk, que a teoria é uma coisa, a prática é outra.

O Microsoft Azure App Service, no processo de swap, troca o código (artefato) e algumas configurações (dependendo do que está marcado como "slot setting"). A lógica é:

Com o plano em mãos, executei os passos. Subi o projeto no slot fallback e, em seguida, realizei o swap.

Ufa, deu certo! A versão foi atualizada com sucesso e o slot fallback agora continha a versão anterior, pronta para um rollback caso necessário. A tensão diminuiu, e a sensação de ter resolvido um problema crítico foi gratificante.


Ficou em aberto

Embora a solução para o problema do slot de fallback tenha sido implementada com sucesso, ainda há um caminho a percorrer. A dependência da interface gráfica da Azure e o uso de releases em modo clássico no Azure DevOps são pontos que precisam ser endereçados. A transição para IaC (Infrastructure as Code) e a conversão das releases para arquivos YAML versionados são os próximos passos para modernizar nossa infraestrutura e processos, garantindo maior automação e controle.


Referências


Vinicius Aguilar — DevOps Engineer

War Room

Part 1 of 3

Incidentes reais, investigações reais. Cada post aqui é um problema que apareceu em produção com o erro, o raciocínio da investigação e a causa raiz. Sem filtro, sem romantizar. É assim que as coisas funcionam na prática.

Up next

DirectoryNotFoundException: quando o teste do dev conhece só a máquina dele

A pipeline falhou na task de testes. O erro apontava para um diretório de templates de email que não existia no agente. O problema não estava na pipeline. Estava no código. E sem saber ler C#, eu nunc