Abbiamo un'app di e-commerce che sviluppiamo presso la nostra azienda. È un'applicazione LAMP ragionevolmente standard che stiamo sviluppando dentro e fuori da circa 3 anni. Sviluppiamo l'applicazione su un dominio di prova, qui aggiungiamo nuove funzionalità e correggiamo i bug, ecc. Il nostro monitoraggio dei bug e lo sviluppo delle funzionalità sono tutti gestiti all'interno di una soluzione di sovversione ospitata (unfuddle.com). Man mano che vengono segnalati dei bug, apportiamo queste correzioni al dominio di test e quindi eseguiamo le modifiche su svn quando siamo felici che il bug sia stato corretto. Seguiamo questa stessa procedura con l'aggiunta di nuove funzionalità.
Vale la pena sottolineare lì l'architettura generale del nostro sistema e delle applicazioni sui nostri server. Ogni volta che viene sviluppata una nuova funzionalità, questo aggiornamento viene distribuito a tutti i siti utilizzando la nostra applicazione (sempre un server che controlliamo). Ogni sito che utilizza il nostro sistema utilizza essenzialmente esattamente gli stessi file per il 95% della base di codice. Abbiamo un paio di cartelle all'interno di ogni sito che contengono file personalizzati per quel sito - file CSS / immagini ecc. Oltre a ciò, le differenze tra ciascun sito sono definite da varie impostazioni di configurazione all'interno di ciascun database dei siti.
Questo accede alla distribuzione vera e propria. Come e quando siamo pronti a distribuire un aggiornamento di qualche tipo, eseguiamo un comando sul server su cui si trova il sito di test. Questo esegue un comando di copia (cp -fru / testsite / / othersite /) e passa attraverso ogni forza vhost aggiornando i file in base alla data modificata. Ogni server aggiuntivo su cui ospitiamo ha un vhost a cui sincronizziamo la base di codice di produzione e quindi ripetiamo la procedura di copia su tutti i siti su quel server. Durante questo processo spostiamo i file che non vogliamo sovrascrivere, spostandoli indietro una volta completata la copia. Il nostro script di rollout svolge una serie di altre funzioni come l'applicazione di comandi SQL per modificare ciascun database, l'aggiunta di campi / nuove tabelle ecc.
Ci siamo sempre più preoccupati del fatto che il nostro processo non è abbastanza stabile, non tollerante ai guasti ed è anche un po 'un metodo a forza bruta. Siamo anche consapevoli che non stiamo sfruttando al meglio la sovversione poiché abbiamo una posizione in cui lavorare su una nuova funzionalità ci impedirebbe di implementare una correzione di bug importante poiché non stiamo facendo uso di rami o tag. Sembra anche sbagliato che abbiamo così tanta replica dei file sui nostri server. Inoltre, non siamo in grado di eseguire facilmente un rollback su ciò che abbiamo appena implementato. Effettuiamo un diff prima di ogni lancio in modo da poter ottenere un elenco di file che verranno modificati in modo da sapere cosa è stato modificato dopo ma il processo di rollback sarebbe ancora problematico. In termini di database ho iniziato a esaminare dbdeploy come una potenziale soluzione. Ciò che vogliamo veramente è però una guida generale su come possiamo migliorare la nostra gestione e distribuzione dei file. Idealmente, vogliamo che la gestione dei file sia più strettamente collegata al nostro repository, in modo che un rollout / rollback sia più connesso a svn. Qualcosa come usare il comando export per assicurarsi che i file del sito siano gli stessi dei file repo. Sarebbe anche positivo se la soluzione potesse anche arrestare la replica dei file sui nostri server.
Ignorando i nostri metodi attuali sarebbe davvero bello sentire come le altre persone affrontano lo stesso problema.
riassumere ...
- Qual è il modo migliore per far sincronizzare i file su più server con svn?
- Come dovremmo impedire la replica dei file? symlink / qualcos'altro?
- Come dovremmo strutturare il nostro repository in modo da poter sviluppare nuove funzionalità e correggere quelle vecchie?
- Come dovremmo attivare i rollout / rollback?
Grazie in anticipo
MODIFICARE:
Di recente ho letto molte cose positive sull'uso di Phing e Capistrano per questo tipo di attività. Qualcuno può fornire ulteriori informazioni su di loro e quanto sarebbe bello per questo tipo di attività?