Come posso ridurre i tempi di costruzione da una volta al giorno a una volta ogni 15 minuti?

4

Ho una grande base di codice di file Java / JSP che deve essere compilata e controllata per gli errori. Il tempo di compilazione è abbastanza lungo che lo eseguiamo solo una volta al giorno. Tuttavia, mi piacerebbe che fosse più frequente di così, diciamo ogni intervallo di 15 minuti.

Ma non sono in grado di capire come minimizzare il tempo di costruzione per consentire ciò. Esecuzione dello script ANT, scaricamento di tutti i file da Controllo versione, compilazione di JSP in JAVA e quindi la compilazione di quei JAVA in file di classe richiede un'ora e mezza.

La mia prima soluzione era scaricare una copia del codice base e sincronizzare le modifiche dal server (svn update) ogni 15 minuti, al fine di ridurre il tempo di download. Tuttavia, non sono stato in grado di ridurre al minimo il tempo di compilazione. Sto usando Jasper per compilare i JSP e la costruzione di tutti i file (in file JAVA) richiede diversi minuti. La compilazione dei file Java prodotti richiede altri 15 minuti. Per affrontare questo problema, ho pensato di compilare individualmente i file JSP "aggiornati" e copiarli sul sorgente JAVA. Questo porterebbe via il palco JSP- > JAVA. Tuttavia, ANT e Jasper non hanno semplificato la compilazione di singoli file e assicurano che non vengano visualizzati nuovi errori.

Devo accontentarmi di una volta al giorno? O c'è una soluzione migliore che può essere applicata qui?

    
posta DemCodeLines 21.03.2017 - 17:09
fonte

2 risposte

2

Ho fatto questo tipo di cose in una precedente azienda. Avevamo un'applicazione C molto grande che impiegava anni per realizzare una build completa. 45 minuti di compilazione, ma siamo riusciti a ridurlo a meno di 6.

Misura:

Prima di tutto, vorrei misurare ogni parte del processo:

  1. Dai un'occhiata a 15 minuti.
  2. Compilare il ramo Java richiede 20
  3. Compilare il ramo JSP richiede 40

Tempo: 75 minuti

Tuttavia, nella domanda ci sono voluti un'ora e mezza, quindi mancano 15 minuti, dov'è questo il processo di compilazione?

Running the ANT script, downloading all files off Version Control, compiling JSP's into JAVAs and then compiling those JAVAs into Class files takes an hour and a half.

Quindi la prima cosa è fare un aggiornamento di SVN piuttosto che un checkout come nei commenti che suggerisci, questo riduce i tempi di costruzione a 62 minuti. (Media 6 build al giorno)

Ora penserei di dare un'occhiata agli script di compilazione, è possibile creare il tuo codice JAVA o JSP in parallelo. Dato che è un codice legacy, potrebbe non essergli stato detto di costruire su più CPU. Il nostro progetto era ancora seduto su una singola CPU. Hai menzionato ANT che ha la capacità di costruire in parallelo. Attività parallele

Se già lo fa, scrivere su disco pone un problema? Lo chiedo perché se stai creando molti oggetti, il disco potrebbe colpire la sua larghezza di banda. Prova un disco SSD per la costruzione. Lo dico perché è una soluzione a basso costo da implementare.

Altre cose da considerare: Vuoi un rapido feedback su un cambiamento, deve essere un feedback completo?

  1. Linting del codice per un feedback più rapido per alcuni errori.
  2. Test unitari
  3. Server CI per distribuire il carico su più macchine.

Lungo termine:

  1. Suddividi il codice in più parti, disponi di utilità che potrebbero essere compilate in modo indipendente, quindi incluse successivamente?
  2. PMD può mostrare dove viene utilizzato il codice duplicato. I progetti precedenti hanno normalmente questo problema in cui lo stesso codice è incluso in molti posti.
risposta data 22.03.2017 - 11:27
fonte
1

Considerate la modularizzazione del codice in parti più piccole (logiche). Ad esempio, potresti avere alcuni moduli comuni come oggetti di dominio e DAO, quindi un altro con servizi e logica di business, quindi diversi con visualizzazioni diverse. Ogni modulo avrà una frazione del tempo di compilazione del progetto originale.

È davvero una compilation JUST che prende tutto il tempo o stai facendo anche i test? Se esegui anche test, assicurati che i tuoi test unitari siano in realtà test unitari (nessun database / connettività esterna) e considera di spostare i test di integrazione / funzionali su un altro processo di build da eseguire meno spesso / secondo necessità.

    
risposta data 22.03.2017 - 04:56
fonte

Leggi altre domande sui tag