2009-07-20 17 views
7

Sto costruendo un server CI e mi piacerebbe davvero avere esperienze reali e una panoramica su cosa stanno usando le persone.Come funziona la tua integrazione continua?

Quindi, quali sono i processi di compilazione? C'è qualcosa di simile:

  • uno ogni ora per il codice e test,
  • un altro giorno per costruire MSI e codice metriche,
  • ecc,

e anche, cosa fa la build completa processo di utilizzo? Usi qualcosa come:

  • squadra della città,
  • msbuild,
  • NUnit - per le prove,
  • NCover - per la copertura dei test,
  • NDepend - per le metriche del codice,
  • castello di sabbia - per la documentazione con i commenti del codice,
  • testcomplet - per i test QA,
  • ecc.?

Condividi! ;)

+2

Si prega di consultare: http://stackoverflow.com/questions/102902/what-is-a-good-ci-build -processo – Shog9

+2

@ Shog9: La domanda a cui si fa riferimento discute di elementi a più alto livello (oserei dire * meta *?), mentre questa domanda richiede specifici dettagli di implementazione. Penso che siano abbastanza diversi da mantenere questo aperto. – Treb

risposta

3

Abbiamo avuto una conversazione simile al più recente CITCON Nord America (Conferenza sull'integrazione e il test continuo) in cui tutti abbiamo condiviso le nostre esperienze e abbiamo provato a mettere insieme una road map da semplici CI a sistemi di rilascio e CI ben costruiti.

Le note di conferenza originali sono here. Insieme a Flickr photostream. A cleaned up version è disponibile anche sul blog di urbancode.

Gli australiani rivisitato l'argomento in CITCON Brisbane e un pencast di che è disponibile

Speranza alcune di queste risorse sono utili.

2

Per Java, abbiamo un esempio di Hudson verifica di commit nel repository SVN, per ogni commettere v'è un accumulo in cui tutto è stato compilato e tutte le unità di test vengono eseguiti utilizzando Maven2. Anche Hudson è collegato a un'istanza di Sonar che ci dice statistiche sullo stile di codifica e sulla copertura dei test.

Sonar screenshot http://nemo.sonarsource.org/charts/trends/60175?sids=1024412,1025601,1026859,1073764,1348107,2255284&metrics=complexity,mandatory%5Fviolations%5Fdensity,lines,coverage&format=png&ts=1244661473034

dolce :)

+0

Conosci all'incirca il numero di commit al giorno? – Treb

0

Nel mio caso (un in-house progettata/costruita/sistema CB supportato), si impegna a VCS nell'albero di mira da un dato di configurazione CB coda automaticamente un CB richiesta (più richieste in arrivo mentre un CB è in esecuzione vengono compresse in una, che verrà eseguita non appena l'attuale processo CB è terminato).

Ogni istanza CB risponde a una richiesta CB eseguendo le fasi di generazione e test configurate per eseguirle (distribuendole in parallelo a un "cloud" di server distribuiti condivisi da tutte le istruzioni CB), registrando i risultati di generazione e test e occasionalmente (non più spesso di una frequenza configurata) che lancia "test pesanti" (che può durare molto a lungo e NON bloccheranno le richieste CB in arrivo - i test pesanti vengono completamente disattivati, anche se i log lo rendono molto chiaro esattamente contro quale build hanno funzionato).

"sync to head" (che "head" sarebbe "trunk" in altri VCS ;-), per le dipendenze che non fanno parte dell'albero tracciato da un CB, può accadere ogni volta (questi sarebbero leggeri, build non critiche per la produzione o sperimentali) o solo su richieste di integrazione molto esplicite (che è l'altro estremo, per "rami di rilascio" per build/progetti che sono critici per la produzione) o con tolleranza intermedia.

Non l'apice della pratica dell'ingegneria di rilascio, penso, ma nella sua gamma di opzioni funziona bene per noi, per una varietà molto ampia di progetti di criticità molto diverse, dipendenza-pesantezza, & c ;-).

2

Nel mio precedente progetto avevamo due server luntbuild più un server SVN.

La prima macchina di luntbuild è stata utilizzata per la costruzione del progetto - build incrementali + test di unità per ogni commit e quindi clean build + test di unità + packaging di installazione completo durante la notte.

La seconda macchina luntbuild è stata utilizzata come banco di prova per i test di integrazione. Non appena la prima macchina ha terminato di installare l'installazione notturna, l'avrebbe prelevata, distribuita su se stessa e eseguita la suite completa di test di integrazione (driver basato su ji di swing gui), quindi ogni mattina gli ingegneri di test avrebbero ottenuto un'installazione insieme a un resoconto di un controllo di sanità mentale in modo che possano decidere se vogliono prendere la nuova build o meno.

2

Usiamo CruiseControl.net come nostro server CI in combinazione con nant. La maggior parte delle build (abbiamo circa 30 build) sono attivate sulle modifiche. Alcune build pesanti meno importanti vengono attivate solo una volta ogni notte, questo vale anche per le build di manutenzione che puliscono la maggior parte delle build normali.

Per le nostre build di codice C/C++ stiamo usando un sistema di build proprietario in grado di distribuire build di codice per ogni macchina disponibile in azienda (come IncrediBuild, ma molto più flessibile). Per le nostre build C# chiamiamo direttamente devenv.com, ma usiamo NUnit per eseguire i test unitari. I nostri test di unità C++ utilizzano il nostro framework, eseguendo i risultati in xml che è molto simile a quello di NUnit. Per alcuni controlli extra del codice eseguiamo pclint ogni notte. Per ora, nessuna copertura di codice è ancora fatta, il che è un po 'un peccato.

Stiamo anche utilizzando il sistema per preparare la versione finale del nostro prodotto. È solo il primo passo, in seguito necessita ancora di alcune azioni manuali.

2

Processi di generazione: abbiamo 4 rami attivi di un grande database in cui eseguiamo continuamente build. Per ogni ramo abbiamo le generazioni suddiviso in due fasi:

  • rapido accumulo Continuous Integration che viene eseguito dopo ogni commit in modo da poter ottenere un feedback sul codice rotto, o prove rotti più rapidamente possibile
  • completa automatizzata build che viene eseguito due volte al giorno per garantire che il codice si sviluppi dall'inizio alla fine.

Il nostro processo di compilazione è coordinato da Zed Builds And Bugs e comprende Formica, Fare, Maven, JUnit, Findbugs, gli script di shell (historical), attraverso Windows, Linux, AIX, HP, e Solaris.

Attualmente siamo in procinto di includere più roll-up di trend storici e statistiche in modo da poter vedere da un livello più alto come sta andando il processo di sviluppo.

0

Jenkin è lo strumento migliore per l'integrazione continua (CI). CI non è altro che l'integrazione frequente del codice nel repository (SCM). Inoltre, integrazione di SCM in jenkins per la creazione del codice.

È possibile impostare la frequenza di polling in jenkins. in modo che, ogni volta che le modifiche vengono apportate e commesse in SCM, Jenkins proverà a creare una build. In questo modo funziona ... integrazione continua.

Problemi correlati