Non penso che ci sia una semplice risposta a questo libro di cucina, perché questo dipende molto dal tuo ambiente. Qualunque cosa tu abbia inventato, ti consiglio caldamente un approccio basato su script, con gli script di implementazione che si trovano nel controllo del codice sorgente. Questi script consentiranno anche una migliore integrazione con le soluzioni di costruzione (vedi sotto).
Lo script più semplice da eseguire nell'ambiente di produzione sarebbe semplicemente il comando per ottenere l'ultima (o ottenere una versione specifica) dal controllo del codice sorgente.
La prossima sfida è l'implementazione del database. La soluzione che mi è piaciuta di più per i progetti di piccole e medie dimensioni è di mantenere una tabella delle versioni dello schema in ogni database e di avere tutti gli script di aggiornamento DDL e dati nel controllo del codice sorgente (incluse le origini dati che usano negli archivi compressi). Gli script sono numerati consecutivamente (a partire da 000001 ..., 000002 ..., ecc.) E lo script di distribuzione che eseguo semplicemente esegue il backup del database esistente, quindi ottiene l'ultimo script del database di esecuzione dalla tabella della versione dello schema e quindi esegue qualsiasi nuovo script di database trovato nel controllo del codice sorgente nell'ordine corretto, aggiornando di conseguenza la tabella delle versioni dello schema.
Questo approccio mi consente di ricostruire il database da zero abbastanza rapidamente.
I due approcci considerati nel loro insieme permettono di implementare rapidamente la vostra base di codice per diverse macchine di sosta diverse, l'ambiente di QA, beta, ecc
Per solo un po 'scenari più complessi, si dovrebbe eseguire un server di integrazione continua, come Kieveli et. al. suggerito, che essenzialmente "ricostruisce" l'intera distribuzione regolarmente e quindi contiene script per fare esattamente ciò che si dovrebbe eseguire "manualmente" sopra.
La distribuzione del database può anche essere resa più sofisticata creando uno script di rollback per ogni script di database. Dovresti quindi scrivere una piccola app per controller per gestirli. Esistono diverse soluzioni OSS per questo tipo di materiale e uno di questi potrebbe soddisfare le tue esigenze.
MA, assicuratevi di non auto-distribuire il database in un ambiente di produzione ;-)
fonte
2009-06-15 00:23:56
Hudson è impressionante. – stimms