Come implementare la consegna continua con webapp Java?

5

Ho letto di Continuous Delivery e sembra fantastico automatizzare il processo di distribuzione. Ho letto delle possibilità su come farlo con Java Webapps, ma di solito finisce con il server CI o con il plugin Maven che esegue la distribuzione su Tomcat SENZA riavviare Tomcat usando l'API di gestione di Tomcats. Ma questo porta a problemi di OutOfPermGenSpace e quindi non utilizzerei quelle soluzioni per la produzione. Inoltre, è una seccatura uccidere un Tomcat fuori controllo.

Esiste una tecnologia che faciliti la distribuzione di app Web Java alla produzione? Uso Maven per creare i miei artefatti e distribuirli nel repository nexus.

EDIT:

Non sto cercando di trovare modi per prevenire i problemi di spazio Permgen. Sto provando a distribuire automaticamente in produzione. Non dovrebbero esserci passaggi manuali oltre a scegliere una versione e fare clic su un pulsante (o fornire un numero di versione a uno script della riga di comando). Voglio scoprire se devo creare questo tipo di installazione manualmente o se esiste una soluzione pronta per questo. Finora LiveRebel sembra essere l'unica soluzione finora che non mi richiede di implementare tutto da solo.

    
posta palto 11.12.2011 - 16:06
fonte

4 risposte

4

Dichiarazione di non responsabilità: sono un consulente non pagato per la scheda di consulenza sui prodotti.

Zero turnaround hanno prodotti a basso costo denominati JRebel e LiveRebel che risolvono una vasta maggioranza dei problemi relativi alla distribuzione a caldo di file WAR su una rete server come Tomcat.

Come cita correttamente smp7d, JRebel è la versione dello strumento di sviluppo dei due.

Tendono a lavorare a livello di byte byte, evitando il sistema di caricamento di classi spesso rotto in questo spazio.

    
risposta data 11.12.2011 - 20:59
fonte
2

Potresti restart Tomcat e avresti finito con esso. Inoltre, Tomcat 7 ha risolto i problemi PermGen ... anche se non l'ho provato.

    
risposta data 11.12.2011 - 20:16
fonte
1

Si dovrebbe eseguire la consegna continua solo su un server di sviluppo. Guarda la distribuzione delle modifiche a un'applicazione esplosa su questo server. Se questo non è adatto aumentare la dimensione di PermGen. Pianifica il riavvio giornaliero del server per cancellare la memoria.

Contrassegna e crea un pacchetto di distribuzione per Integration Server e distribuisci solo quando richiesto. Questo dovrebbe essere coordinato con il team di test di integrazione. Trovo che più di una volta al giorno sia spesso eccessivo per questo ambiente.

La distribuzione del pacchetto di distribuzione testato dal server di integrazione alla produzione deve essere eseguita solo previa approvazione. Questo di solito deve essere programmato fuori orario.

MODIFICA: Ovunque ho lavorato dove avevamo la distribuzione automatizzata, è stata realizzata a mano. Ci sono problemi relativi a privilegi, approvazioni, pianificazioni, ecc. Che potrebbero rendere un prodotto generico non adatto a un particolare ambiente. In ambienti con più server con bilanciamento del carico, possono esserci ulteriori problemi.

EDIT2: ho sempre sostenuto l'implementazione automatizzata. La distribuzione continua come ho esperienza è costruita e distribuita al momento del check-in. Non vuoi che la produzione sia l'obiettivo di implementazione. È un buon modo per garantire che le cose vengano create nell'ambiente di destinazione e non solo sul desktop degli sviluppatori.

La scelta di build come schieramento dei candidati per ulteriori test e l'eventuale implementazione della produzione non è ciò che considererei una distribuzione continua. Lo considero una best practice se la selezione e la migrazione sono automatizzate

    
risposta data 11.12.2011 - 17:59
fonte
0

Penso che potresti aumentare il permGen szie (-XX: PermSize = 64M -XX: MaxPermSize = 128m), questo valore predefinito è 64M. Se non vuoi aumentarlo, potresti utilizzare ANT per distribuire la tua app Web.

    
risposta data 13.12.2011 - 02:24
fonte

Leggi altre domande sui tag