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 compito strettamente correlato al controllo della versione e alla gestione della build, ma è abbastanza distinto che spesso richiede una strategia separata, anche se utilizza alcuni degli stessi concetti e gli stessi meccanismi di elaborazione e memorizzazione.
La gestione della configurazione, oltre a tenere sotto controllo un ambiente di lavoro, aiuta anche a stabilire una registrazione dei diversi ambienti di lavoro in cui viene utilizzato il software (sviluppo come menzionato, oltre a test / controllo qualità, distribuzione ai clienti di routine, distribuzione ai clienti che richiedono una considerazione speciale o configurazione speciale o proprietà di costruzione e così via).
Come ho detto, spesso questo è un compito che coincide con il controllo della versione di origine, e spesso i dati di gestione della configurazione risiedono accanto al sorgente sia nella documentazione che nel repository sorgente. Non deve essere, ma spesso è una questione di convenienza.
L'automazione di alcuni aspetti della gestione della configurazione è notevolmente migliorata negli ultimi anni. Alcune risposte e commenti hanno suggerito script come un modo per promuovere la gestione della configurazione e gli script sono una buona risposta per ottenere risultati riproducibili, ma spesso gli script fatti manualmente da soli sono incoerenti e incompleti. Uno di questi è migliorato grazie al provisioning automatico. Sistemi come burattino o chef consente di specificare componenti e sistemi software per un particolare utente o macchina o per un particolare profilo di attività e fornisce" ricette "che consentono un approccio a mani libere per l'impostazione di una macchina o di un ambiente completo. Prende fondamentalmente il concetto di un repository di distribuzione software e si estende e 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 vostro situazione.
Vagrant prende questo in una direzione leggermente diversa e fornisce un modo per far ruotare rapidamente le definizioni delle macchine virtuali, in modo che una VM possa avere il suo software virtuale e hardware vengono forniti automaticamente e possono rivelarsi un modo conveniente per riprodurre una particolare rappresentazione di un ambiente hardware utilizzato dall'utente del software.
Ogni sistema (e variazioni) richiede un po 'di tempo per essere impostato, ma ha qualche valore chiaro se si trova che il compito di ricaricare e riconfigurare sia un'attività comune.