O que é e como funciona o conceito de não pise no meu vazio
A expressão nao pise no meu vazio vem do universo de desenvolvimento de software e se refere basicamente a manter áreas de código ou dados intocadas durante processos de integração, migração ou deploy. Não é um tool que você baixa e instala. É uma prática, um princípio de organização que evita sobrescritas acidentais, perda de configurações e quebras em pipelines automatizados.
nao pise no meu vazio na prática
A ideia central é simples: se você tem uma pasta, um arquivo de configuração ou um módulo que não deve ser modificado por scripts automáticos, você o isola. No meu caso, trabalhei num projeto onde o pipeline de deploy do Jenkins sobrescrevia um diretório /config/ que continha certificados SSL customizados. O erro era intermitente porque o overwrite só acontecia em builds específicos, dependendo de qual stage rodava. A solução foi colocar esse diretório dentro de um volume montado via Docker, com permissões de read-only. Assim, o pipeline tentava escrever e falhava silenciosamente, mas os certificados nunca eram tocados. Muita gente confunde isso com simplesmente travar permissões de arquivo. Não é. É sobre arquitetura. Você define fronteiras claras entre o que é gerado automaticamente e o que é mantido manualmente. Arquivos de configuração, credenciais, state files — tudo isso fica fora dos caminhos que ferramentas automatizadas limpam ou sobrescrevem.
Como implementar essa prática no seu fluxo de trabalho
O primeiro passo é mapear quais arquivos e diretórios no seu projeto são sensíveis. Liste-os. Anote o que cada um faz e quem deveria ter acesso de escrita. Depois, decida onde cada um vai morar. Há três abordagens comuns: Volume mounted — se você usa Docker ou Kubernetes, monte diretórios sensíveis como volumes com permissão read-only. Isso impede que qualquer container ou script dentro do ambiente modify esses paths. Funciona bem para certificados, chaves API e arquivos de configuração de runtime.
Variables de ambiente — credenciais e valores dinâmicos não devem existir em arquivos no sistema de código. Use variáveis de ambiente injetadas pelo pipeline. No GitHub Actions, por exemplo, você configura secrets no repositório e os acessa via ${{ secrets.MY_SECRET }}. No GitLab CI, é similar com $MY_SECRET. O arquivo que referencia essas variáveis pode ser versionado, o valor nunca será. Branch protection e permissões de repositório — para arquivos de configuração que precisam ser editados manualmente, use branches protegidas. Exija review obrigatório e bloqueie pushes diretos. Isso não evita sobrescrita automática, mas evita que alguém commite por engano ou remova conteúdo importante.
👉 Clique no botão abaixo para saber mais sobre o assunto!
Erros comuns que todo mundo comete
O erro mais frequente é achar que definir permissões chmod 444 em arquivos resolve o problema. Em ambientes contêinerizados, o container pode rodar como root e ignorar essas permissões completamente. Permissões do sistema de arquivos só protegem contra usuários locais, não contra processos com privilégios elevados dentro do container. Outro erro comum é misturar arquivos de configuração do projeto com arquivos de configuração do ambiente de deploy. Se o mesmo arquivo config.yaml é usado tanto para desenvolvimento quanto para produção, o pipeline vai sobrescrever o que você não quer. Separe: um arquivo base no repositório, overrides específicos por ambiente em volumes ou secrets.
Eu vi um time perder três dias de trabalho porque o Terraform, ao rodar terraform apply, apagava um diretório de dados que não estava no estado da infraestrutura. O Terraform não sabia que aquele diretório existia, então quando o plano mostrou que precisava criar a estrutura de pastas, ele removeu o que já estava lá antes de recriar. A correção foi adicionar o caminho como resource "null_resource" com um provisioner que preserva o conteúdo existente, ou melhor ainda, usar um bucket S3 externo para armazenar dados persistentes.
Quando essa abordagem falha
Não adianta isolar tudo. Se você tem dezenas de arquivos sensíveis espalhados por diretórios diferentes, a sobrecarga de manutenção pode ser maior que o benefício. Cada volume extra, cada variável de ambiente, cada regra de proteção de branch é algo que precisa ser documentado e mantido. Times pequenos geralmente se saem melhor com duas ou três regras claras do que com um sistema complexo de isolamentos. Também funciona mal em projetos onde a configuração é inerentemente dinâmica e precisa ser gerada em tempo de build. Nesse caso, o certo é gerar os arquivos sensíveis a partir de templates seguros, não tentar protegê-los após a geração. Use ferramentas como helm secrets ou sops para criptografar valores antes de inseri-los em templates.
Resumo prático
Mapeie os arquivos e diretórios que não podem ser tocados. Isole-os usando volumes read-only, variáveis de ambiente ou proteção de branch. Não confie apenas em permissões de arquivo. Separe configuração de projeto de configuração de ambiente. Mantenha o sistema simples. E se algo der errado, o log do pipeline vai mostrar onde a sobrescrita aconteceu — é só rastrear o stage que causou o problema e ajustar o caminho ou a permissão correspondente.