Il concetto che stai descrivendo è la gestione della configurazione. Questo è come sembra, un modo per identificare, registrare, versione / traccia e segnalare un ambiente. Spesso è un'attività fortemente correlata al controllo della versione e alla gestione della build, ma è abbastanza distinta che spesso richiede una strategia separata, anche se utilizza alcuni degli stessi concetti e stessi meccanismi di elaborazione e archiviazione.
La gestione della configurazione oltre a aiutare a mantenere un ambiente di lavoro sotto controllo aiuta anche a stabilire un registro dei diversi ambienti di lavoro in cui viene utilizzato il software (sviluppo come detto, oltre a test / QA, distribuzione ai clienti di routine, distribuzione ai clienti che richiedono una considerazione speciale o una configurazione speciale o costruire proprietà e così via).
Come ho detto, spesso si tratta di un'attività che coincide con il controllo della versione di origine e spesso i dati di gestione della configurazione risiedono accanto all'origine sia nella documentazione che nel repository di origine. Non deve essere, ma spesso è per comodità.
L'automazione di alcuni aspetti della gestione della configurazione è notevolmente migliorata negli ultimi anni. Alcune risposte e commenti hanno suggerito che gli script sono un modo per promuovere la gestione della configurazione e gli script sono una buona risposta per aiutare a ottenere risultati riproducibili, ma spesso gli script fatti a mano da soli sono incoerenti e incompleti. Uno di questi modi è migliorato attraverso il provisioning automatico. Sistemi come burattini o chefaiutare a specificare componenti e sistemi software per un particolare utente o macchina o per un particolare profilo di attività e fornire "ricette" che consentano un approccio pratico alla creazione di una macchina o un ambiente completi. Praticamente prende il concetto di un repository di distribuzione software e lo estende e lo generalizza fornendo non solo i pacchetti di software necessari per un sistema, ma anche i profili di configurazione specifici per ciascun pacchetto in modo che sia pronto per l'uso nel modo appropriato per il tuo situazione.
Vagrant prende questo in una direzione leggermente diversa e fornisce un modo per far girare rapidamente le definizioni delle macchine virtuali, in modo che una VM possa disporre automaticamente del proprio software e hardware virtuale e possa rivelarsi un modo conveniente per riprodurre una particolare rappresentazione di un hardware ambiente utilizzato dall'utente del software.
Ogni sistema (e variazioni) richiede un po 'di tempo per essere configurato, ma ha un certo valore se trovi che il compito di ricaricare e riconfigurare sia un compito comune.