2010-08-01 11 views
5

Il mio posto di lavoro utilizza Hudson per le sue build quotidiane, con diversi build slave (uno Linux, uno Windows, un Mac) che controllano la nostra base di codice completa da svn e costruiscono la nostra app a mezzanotte ogni giorno. Tutto funziona abbastanza bene.Come posso assicurarmi che tutti i miei schiavi hudson compilino la stessa revisione svn per la build giornaliera?

C'è un problema occasionale che accade però ... a volte uno sviluppatore lavorerà fino a tardi e controllerà in una modifica a svn subito dopo mezzanotte. Quando ciò accade, è possibile che alcuni degli schiavi di build giornalieri eseguano il loro 'svn checkout' prima che il commit svn venga elaborato, mentre altri slave di build lo faranno dopo che il commit è stato elaborato. Quando ciò accade, ci ritroviamo con diverse revisioni costruite su piattaforme diverse ... ad es. la build del Mac potrebbe creare una versione SVN della revisione 5555, mentre la build di Windows finisce con l'essere una versione della revisione SVN 5556. È un problema, dal momento che vogliamo che tutte le build giornaliere di un dato giorno siano basate sulla stessa base di codice.

Suppongo che un modo per evitare questo è vietare agli sviluppatori di impegnarsi in svn tra le 23:30 e le 12:30, ma preferirei una soluzione più elegante che non si basa sul comportamento degli sviluppatori. Ce n'è uno? In particolare, se c'è un modo per dire a hudson di controllare la revisione del codice che era corrente a mezzanotte del giorno corrente (es. "Svn co -r {" the-current-date "}") invece di fare il check-out TESTA, penso che potrebbe fare il trucco.

C'è un modo comune/facile per gestire questo problema?

+0

Inizia la costruzione alle 1 di notte? :) –

+0

lol, era una buona scelta. Spero che non abbiano un problema, in modo che gli sviluppatori siano lì fino alle 13 o anche più tardi. ;) –

risposta

3

La soluzione dipende un po 'da come si avvia la build. Se sono tutti i timer avviati, è possibile lasciarli tutti in esecuzione contemporaneamente. Il rischio di finire con diverse revisioni sarà minimo. Una versione più elegante consiste nell'avere un lavoro che attiva tutti i lavori di compilazione passando la revisione come parametro. Se la compilazione non è troppo lunga, è possibile creare un lavoro che passa la revisione a tutti gli altri lavori.

EDIT: attualmente i seguenti non è supportata da Hudson (1.376)

Ho anche trovato un bel svn book. Si afferma che è possibile sostituire la revisione con una data in parentesi graffe. Quindi puoi provare <svn-url>@{00:00} nella configurazione del tuo lavoro.

+0

Il trucco @ {00:00} è pulito; Sfortunatamente non funziona tramite il client svn basato su java incorporato in hudson. Un'altra considerazione è se il repository utilizza svn: externals, quindi credo che anche gli esterni possano essere recuperati con la revisione sbagliata. – jdkoftinoff

+0

L'ho notato anche io. :( –

0

Un'altra idea che ho trovato utile è quello di condividere stessa directory sorgente tra gli schiavi e hanno una comando svn up, questo ridurre il tempo di aggiornamento svn, e anche di liberazione dal dolore della sincronizzazione.

Io uso nfs su macchine Linux, anche sshfs funzionerà.

Problemi correlati