Marcio Cunha

Deploy quebrado? Como implementar feature flags com GitOps

Descubra como evitar falhas em produção utilizando feature flags gerenciadas por repositórios declarativos e práticas modernas de GitOps.

Marcio Cunha•7 min
Também disponível em:EspañolEnglish
Resumo
  • Repositórios declarativos eliminam discrepâncias de configuração entre ambientes de homologação e produção.
  • Feature flags desacoplam o deploy de código da liberação visível para o usuário final.
  • Ferramentas de GitOps sincronizam o estado real da infraestrutura diretamente com o versionamento de código.
  • Rollbacks de funcionalidades defeituosas tornam-se instantâneos através de simples reversões de commits.
  • A auditoria de alterações ganha rastreabilidade completa com histórico de revisões em pull requests.

O pesadelo do deploy travado e a promessa do GitOps

Quem nunca passou pela angústia de enviar código novo para o ar e ver o sistema inteiro parar de funcionar que atire a primeira pedra. Na engenharia de software tradicional, o ato de colocar uma aplicação em produção costuma ser um momento tenso, repleto de incertezas e reuniões emergenciais de resgate. Na prática, isso significa que testar a integridade de um sistema inteiro de uma só vez é um convite aberto para falhas catastróficas que afetam milhares de usuários em questão de segundos. Para resolver esse problema estrutural, a indústria adotou a metodologia de como gerenciar segredos no Kubernetes com Vault e GitOps, unindo a automação contínua com um controle de versão rigoroso.

A grande virada de chave aconteceu quando as equipes perceberam que podiam tratar infraestrutura e configurações exatamente da mesma forma que tratam o código-fonte principal de seus sistemas. É aqui que entra o conceito de GitOps, que nada mais é do que usar um repositório centralizado no Git — o sistema de controle de versões mais popular do mercado — como a única fonte da verdade para tudo o que roda nos servidores. Se uma configuração não está descrita e aprovada nesse repositório, ela simplesmente não existe no ambiente de produção. Essa abordagem elimina aquelas famosas alterações manuais feitas diretamente no servidor às escuras, que ninguém lembra quem fez nem por qual motivo técnico.

O que são feature flags e por que elas mudam o jogo

Imagine que você construiu um novo motor para um carro de corrida, mas em vez de trocar o motor inteiro de uma só vez na pista, você instala um painel de controle com uma chave liga-desliga dentro da cabine. As chamadas feature flags — que funcionam como chaves de comutação lógica embutidas no código — permitem exatamente isso: colocar funcionalidades novas em produção de forma invisível para o público geral. Na prática, o código do recurso novo viaja junto com o pacote principal da aplicação, mas ele permanece dormente e inacessível até que a chave seja ativada remotamente pelo painel de controle ou por uma variável de configuração externa.

Essa separação absoluta entre o ato de publicar o código e o ato de liberar a funcionalidade para o usuário final transforma completamente a dinâmica de trabalho das equipes de engenharia. Quando um erro inesperado acontece, em vez de passar horas gerando uma nova versão do sistema e executando um processo demorado de reversão, a equipe simplesmente altera o estado da chave digital de ligada para desligada em poucos segundos. O sistema se autocorrige instantaneamente sem precisar reiniciar servidores ou refazer deploys complexos. Além disso, essa técnica conversa muito bem com estratégias avançadas de resiliência e como implementar observabilidade com OTel para monitorar o comportamento real do software em tempo de execução.

Centralizando flags em arquivos declarativos

Tradicionalmente, a gestão de feature flags dependia de plataformas comerciais fechadas de terceiros ou de painéis web caóticos onde qualquer pessoa com permissão podia alterar regras críticas sem deixar rastros auditáveis claros. Com a ascensão do ecossistema moderno de ferramentas de entrega contínua, a comunidade começou a migrar para arquivos de configuração declarativa — geralmente escritos em formato YAML ou JSON — salvos diretamente no mesmo repositório do projeto. Isso significa que definir quem pode ver uma nova tela ou qual percentual da base de usuários vai testar um algoritmo de busca passa a ser um processo controlado por revisão de código tradicional, exigindo aprovação de outros desenvolvedores antes de entrar em vigor.

Na prática, o arquivo declarativo funciona como um contrato imutável entre a intenção do desenvolvedor e o comportamento do sistema distribuído. Vejamos um exemplo simples de como essa estrutura se apresenta no dia a dia dos arquivos de configuração:

flags:  - name: novo_checkout_pagamento    owner: equipe-financeira    status: habilitado    regras:      - ambiente: producao        criterio: percentual        valor: 20      - ambiente: homologacao        criterio: global        valor: true

Esse modelo em texto puro traz uma clareza impressionante para toda a organização, permitindo que gerentes de produto, engenheiros de infraestrutura e desenvolvedores vejam exatamente quais recursos estão ativos em cada ambiente sem precisar adivinhar regras escondidas dentro de bancos de dados legados ou painéis proprietários inacessíveis.

Sincronizando o repositório com o cluster usando GitOps

Escrever arquivos de configuração declarativos é apenas o primeiro passo da jornada; o verdadeiro desafio operacional reside em garantir que o estado descrito nesses arquivos reflita perfeitamente o que está rodando nos servidores em tempo real. É justamente nesse ponto que o ciclo de GitOps brilha com intensidade máxima, utilizando agentes automatizados instalados no cluster — como o ArgoCD ou o Flux — que monitoram constantemente o repositório Git em busca de qualquer alteração nos arquivos de flags. Assim que um novo commit é aprovado e integrado à branch principal, o agente detecta a mudança e aplica o novo estado de forma totalmente automatizada e segura.

Para garantir que o fluxo ocorra sem surpresas desagradáveis, o processo padrão segue etapas bem definidas e auditáveis:

  1. O desenvolvedor ou o gerente de produto altera o arquivo YAML de configuração de flags no repositório Git e abre um Pull Request.
  2. A equipe revisa a alteração proposta, valida os critérios de liberação e aprova a modificação através de testes automatizados.
  3. O código é mesclado na branch principal, disparando o agente de GitOps que lê imediatamente o novo estado declarativo.
  4. O cluster de servidores atualiza o mapa de flags em memória, aplicando o novo comportamento de forma distribuída e sem indisponibilidade.

Esse fluxo elimina completamente o fator humano na hora de aplicar as mudanças na infraestrutura, reduzindo a zero os erros causados por digitação incorreta de parâmetros em consoles web de administração.

Desafios operacionais e armadilhas comuns

Apesar de todas as vantagens evidentes, adotar feature flags controladas por GitOps exige disciplina rigorosa para evitar que o repositório se transforme em um cemitério de códigos mortos. O problema mais comum que as equipes enfrentam é o acúmulo de chaves antigas que nunca mais foram removidas do código-fonte após o lançamento definitivo do recurso. Na prática, se uma flag foi criada para testar um botão novo no ano passado e esse botão já é o padrão absoluto para cem por cento dos usuários hoje, manter aquela verificação lógica no código só serve para adicionar complexidade desnecessária e dificultar a leitura do sistema.

Outro cuidado fundamental diz respeito à latência na propagação das alterações quando o volume de requisições atinge patamares massivos. Se cada requisição feita pelo usuário precisar consultar um arquivo estático pesado no disco ou fazer uma chamada remota complexa para validar a flag, a performance da aplicação vai desabar rapidamente. A solução para esse gargalo é manter o conjunto atualizado de flags em uma cache local ultrarrápida na memória RAM da aplicação, permitindo que o agente de GitOps atualize apenas essa estrutura volátil em segundo plano sempre que houver um novo commit no repositório oficial. Para aprofundar esses conceitos na prática em produção, confira também nossa análise técnica sobre IA generativa cara? Como reduzir custos de tokens com cache.

Considerações finais

A união entre feature flags e práticas declarativas de GitOps representa uma verdadeira evolução na forma como encaramos o risco de colocar software em produção. Ao transformar o controle de lançamentos em código versionado, as empresas ganham velocidade extrema sem abrir mão da segurança operacional e da previsibilidade. O segredo do sucesso reside em manter uma cultura de limpeza contínua do código, garantindo que as chaves temporárias cumpram seu papel e sejam devidamente removidas assim que o recurso estiver totalmente consolidado no mercado.

Adotar essa mentalidade não significa apenas utilizar ferramentas modernas de automação, mas sim repensar a cultura de entrega para que o erro deixe de ser um evento traumático e passe a ser apenas mais um ponto de ajuste rápido no painel de controle da engenharia.