O conceito que você está descrevendo é gerenciamento de configuração. É o que parece, uma maneira de identificar, gravar, versão / faixa e relatar um ambiente. Geralmente, é uma tarefa fortemente relacionada ao controle de versão e gerenciamento de compilação, mas é suficientemente distinta que requer uma estratégia separada, mesmo que use alguns dos mesmos conceitos e os mesmos mecanismos de processamento e armazenamento.
O gerenciamento de configuração, além de ajudar a manter um ambiente de trabalho sob controle, também ajuda a estabelecer um registro dos diferentes ambientes de trabalho nos quais o software é usado (desenvolvimento conforme mencionado, mais testes / controle de qualidade, implantação em clientes de rotina, implantação em clientes que exigem consideração especial ou configuração especial ou construir propriedades e assim por diante).
Como eu disse, muitas vezes essa é uma tarefa que coincide com o controle de versão de origem, e geralmente os dados de gerenciamento de configuração residem próximos à fonte na documentação e no repositório de origem. Não precisa ser, mas geralmente é uma questão de conveniência.
A automação de alguns aspectos do gerenciamento de configurações melhorou bastante nos últimos anos. Algumas respostas e comentários sugeriram scripts como uma maneira de promover o gerenciamento de configuração, e os scripts são uma boa resposta para ajudar a obter resultados reproduzíveis, mas muitas vezes os scripts criados manualmente são inconsistentes e incompletos. Uma maneira de melhorar isso é através do provisionamento automático. Sistemas como fantoche ou chefajude a especificar componentes e sistemas de software para um usuário ou máquina específico ou para um perfil de tarefa específico e forneça 'receitas' que permitam uma abordagem prática para configurar uma máquina ou ambiente completo. Basicamente, ele pega o conceito de um repositório de distribuição de software e o estende e generaliza, fornecendo não apenas os pacotes de software necessários para um sistema, mas também perfis de configuração específicos para cada pacote, para que ele esteja pronto para uso da maneira apropriada para o seu sistema. situação.
O Vagrant leva isso em uma direção um pouco diferente e fornece uma maneira de girar rapidamente as definições de máquinas virtuais, de modo que uma VM possa ter seu software e hardware virtual provisionados automaticamente e pode provar ser uma maneira conveniente de reproduzir uma representação específica de um hardware ambiente usado pelo usuário do seu software.
Cada sistema (e variações) demora um pouco para ser configurado, mas possui um valor claro se você achar que a tarefa de recarregar e reconfigurar é uma tarefa comum.