L'integrazione continua non genera mai errori di compilazione

4

Sto lavorando con una varietà di siti Web Java EE che utilizzano le librerie interne che abbiamo sviluppato. Per ogni sito web, eseguiamo l'upgrade solo alle nuove versioni delle nostre librerie interne secondo necessità e, prima di impegnarci, ci assicuriamo che il sito sia compilato correttamente.

Ciò significa che quando TeamCity crea una build di uno dei nostri siti, il sito viene compilato correttamente, ma in seguito, quando il sito viene aggiornato all'ultima versione delle librerie interne, potrebbe esserci un errore di compilazione.

C'è un buon modo per gestirlo?

Non stiamo ancora usando Maven; utilizzare Maven significa che i nostri siti Web potrebbero utilizzare automaticamente l'ultima versione di librerie interne?

Grazie.

Chiarimento:

Ciò che a volte incontriamo è questo:

  1. Il progetto A dipende da una libreria e attualmente utilizza la versione 1.0 della libreria
  2. Il progetto B dipende anche da quella libreria. Apporto modifiche alla libreria in modo che ora sia la versione 1.5. Il Progetto B ora usa 1.5.
  3. Il progetto A e il progetto B sono stati entrambi compilati correttamente dal server CI (TeamCity)
  4. Lavorando sul progetto A di nuovo, aggiorno a 1.5 e scopro che 1.5 ha delle modifiche in questo.

C'è un modo per il server CI di scoprire questo tipo di modifiche di rottura?

    
posta Jon Onstott 11.02.2011 - 23:18
fonte

4 risposte

1

Usa Maven, vale la pena dedicare tempo per impostare i tuoi progetti in modo conforme al suo modo di fare le cose. Ho bisogno anche di un repository interno locale per distribuire risorse, io uso Archiva. Quindi puoi impostare la tua versione di sviluppo su qualcosa di simile alla versione 1.1-SNAPSHOT e che conterrà automaticamente l'ultima versione di quel codice in fase di sviluppo quando viene distribuita su Archiva.

Passa alle versioni a versione fissa, versioni che non hanno il suffisso -SNAPSHOT per la produzione. Se lasci fuori <version/> su una dipendenza, per impostazione predefinita verrà utilizzata l'ultima versione rilasciata / non istantanea.

Tutto questo è stato progettato molto bene e funziona perfettamente con Hudson / Jenkins e qualsiasi altro strumento che si integri con Maven.

    
risposta data 06.03.2011 - 21:38
fonte
2

Gestiamo questo come parte del nostro sistema di build (SCons nel nostro caso). Cioè, specifichiamo la dipendenza della build da una versione di una libreria. Un tipico caso che abbiamo riscontrato nella nostra pipeline è che dobbiamo aggiornare un plug-in per un'applicazione, prima che l'applicazione possa compilare e installare, che la versione corretta del plugin debba essere compilata e installata e, facoltativamente, superare tutti i test unitari. Il vantaggio di rendere questo requisito di compilazione al posto del requisito di CI è che sia lo sviluppatore sia il sistema di elementi di configurazione sono impostati con gli stessi vincoli, il che dovrebbe semplificare questo tipo di situazione.

    
risposta data 12.02.2011 - 00:43
fonte
0

Prima eravamo abituati ad avere problemi del genere. Per noi ha risolto questi problemi poiché dichiari esplicitamente le versioni con cui vuoi lavorare. Offre anche una migliore visibilità sulle dipendenze transitive, che è il problema che stai combattendo.

    
risposta data 12.02.2011 - 00:32
fonte
-1

Dichiarazione di non responsabilità: non sono uno sviluppatore Java e non ho mai usato Maven, quindi è del tutto possibile che invalidi tutto ciò che dirò di seguito. Ma potrebbe essere utile per le persone non-Java in seguito.

Se usi TeamCity 6, puoi utilizzare un passo del runner della riga di comando nella tua build che eseguirà xcopy per i giare dipendenti.

Se disponi di build TeamCity configurati che producono quelle librerie interne, puoi impostare dipendenze tra le build del tuo sito e le build della libreria in modo tale che una build di una libreria di successo possa innescare la costruzione di un sito. Se la build della libreria produce i jar come artefatti, TeamCity potrebbe quindi estrarre quei vasi anche nella build del sito.

Un'altra opzione (forse la peggiore) è controllare i vasi nel controllo del codice sorgente e configurare TeamCity per controllarli da lì per le build del sito e per attivare i build del sito quando vengono controllate le nuove librerie.

    
risposta data 12.02.2011 - 06:47
fonte

Leggi altre domande sui tag