Simplificando, o produto da minha empresa é um webapp com um back-end de banco de dados. Temos um ambiente de palco e um ambiente de produção para cada um dos cerca de 100 clientes. Existe um banco de dados separado para cada ambiente. O conteúdo do banco de dados é proveniente de vários arquivos CSV que são criados e mantidos por nossa equipe de dados (não técnicos). Os dados são específicos do cliente e também devem ser atualizados quando o dev adicionar novos recursos ao produto. No entanto, nem todos os clientes usam a mesma versão do produto, portanto, não apenas o conteúdo, mas também a estrutura dos CSVs variam de acordo com o cliente.
Atualmente, os arquivos CSV são versionados no SVN. No entanto, não há separação entre dados testados e não testados. Minha equipe é responsável pelo carregamento de novos dados para os ambientes do cliente, mas acabamos sendo gravados antes ao carregar dados não testados em um ambiente de produção. A resposta clara para isso é imitar uma configuração de desenvolvimento e criar um tronco, ramificações e tags, onde o tronco é sempre estável (dados testados), ramificações contêm alterações experimentais / não testadas e marcas são criadas toda vez que novos dados são carregados em um meio ambiente.
Minha pergunta envolve a dependência entre dados e código ... quando o dev faz uma versão que inclui novos recursos, os dados precisam ser atualizados para acomodar esses recursos antes que possamos atualizar o código em um ambiente. Como podemos rastrear se os dados de um determinado cliente são compatíveis com uma versão específica do código?
Meu primeiro instinto é criar uma filial no repositório de dados toda vez que um upgrade de código for planejado para um determinado cliente. O nome da filial corresponderia ao número da versão. No entanto, como a versão do código em nossas caixas de produção normalmente fica significativamente atrás de nossos ambientes de estágio, a equipe de dados teria que trabalhar em duas ramificações simultaneamente, garantindo que novos recursos para o código mais recente e maior entrem apenas na ramificação mais recente. correções continuam a ir no ramo mais antigo também. Naturalmente, uma vez que o código no palco e produção divergem, não podemos ter 100% de certeza de que as correções de dados que testamos no palco funcionarão no código antigo instalado na produção. Alguém tem alguma idéia sobre como podemos gerenciar melhor esse processo?