Soluzione 1:
Disclaimer:sono uno degli sviluppatori di Puppet.
Il modo ovvio è semplicemente applicare i concetti:definire un ciclo di sviluppo/test/produzione e spingere i cambiamenti attraverso di essi. Utilizza il controllo della versione per tenere traccia dei sistemi.
In breve tempo, iniziare questo percorso porta a scoprire che vuoi davvero strumenti che automatizzino quelle cose - essenzialmente, che vuoi automatizzare l'amministrazione dei sistemi, in modo da non usare quelle tecniche sulle macchine, le usi sul sistema che gestisce le macchine.
Strumenti come Chef, Puppet, Salt e CFEngine sono tutti strumenti popolari per soddisfare questa seconda esigenza. Funzionano nella direzione generale di trasformare l'amministrazione dei sistemi in una soluzione centrale che puoi controllare e testare la versione.
Il movimento DevOps è un'altra fonte di buone informazioni su come farlo. Sebbene il precetto sia una migliore cooperazione tra gli sviluppatori e il personale operativo, tende anche nella stessa direzione.
Soluzione 2:
La risposta breve è "Gestione della distribuzione del sistema operativo", "Gestione della configurazione" e "Pacchetti software". Segue una lunga risposta.
Vorrei aggiungere alla risposta di Daniel Pittman un'analisi di ciò che costituisce un "sistema" nell'amministrazione dei sistemi.
Un sistema o un ambiente comprenderà:
- Server
- Sistema operativo
- Configurazione
- Pacchetti del fornitore; e
- Pacchetti locali
Ad avvolgerli saranno processi come:
- Distribuzione o imaging del sistema operativo
- Gestione della configurazione
- Gestione dei pacchetti software
- Controllo/registrazione
- Monitoraggio
- Backup
E ti piacerebbe che questi si combinassero insieme per aiutarti a raggiungere obiettivi non funzionali come:
- Ripetibilità
- Manutenibilità
- Misurabilità
- Prestazioni
- Tracciabilità
- Testabilità
- Modificabilità
Questa è una rapida discarica cerebrale. Sono sicuro che se ne potrebbero aggiungere altri a tutte le liste.
La tua domanda tocca alcuni di questi senza usare le parole specifiche. Ad esempio, vuoi essere in grado di distribuire facilmente e tornare indietro, ovvero vuoi manutenibilità; vuoi farlo in un ambiente di test e testare finché non passa, cioè ripetibilità, testabilità e misurabilità; stai pensando di inserire le immagini VM nel controllo della versione perché desideri la ripetibilità del sistema operativo e le distribuzioni della configurazione.
Ci sono molti strumenti per aiutarti in questo, alcuni dei quali menzionati da Daniel. Alcuni altri sono:
- Kickstart (basato su RedHat), Preseed (basato su Debian), WDS (MS Windows) per la distribuzione di ambienti OS noti
- Spacewalk/Satellite (basato su RedHat), Criteri di gruppo (MS Windows) per la configurazione e la gestione dei pacchetti
- Sistemi di packaging YUM e APT per la generazione, l'implementazione, l'aggiornamento e la rimozione di pacchetti (insiemi di file binari, dati e configurazione che comprendono un software)
- Nagios, OpenNMS e SCOM per il monitoraggio
- Amanda, Bacula e Windows Backup Server per i backup
- Munin, PCP e Hyperic per il monitoraggio delle prestazioni
- CVS, SVN, GIT o Bazaar per il controllo della versione
- Hudson e Jenkins per la gestione delle build
- Selenio e robot per i test
- Bugzilla, Request Tracker e Jira per la registrazione, la comunicazione e il tracciamento
Ancora una volta, questo non è un elenco completo, ma qualcosa che tengo in mente per guidarmi e spero che possa aiutare anche te.