21

Attualmente sto cercando una buona installazione per un server di integrazione continua che costruisca varie applicazioni C++ per diverse distribuzioni Linux.Server di integrazione continua per C++: che ne è delle dipendenze della libreria?

La mia domanda principale è come gli altri utenti hanno gestito le differenze nelle librerie di sistema tra le distribuzioni Linux?

Mentre potrebbe essere relativamente facile creare dipendenze dirette come le librerie UI insieme a un'applicazione, le dipendenze "indirette" come glibc sembrano un grosso problema se dovessero essere costruite insieme all'applicazione ogni volta. Pertanto, sto pensando di spostare l'effettiva esecuzione della compilazione in una macchina virtuale separata per ogni distribuzione, ad es. usando rlogin per eseguire i comandi. Il mio obiettivo è prevenire le incompatibilità binarie tra le versioni della libreria build-machine e quelle distribuite nelle distribuzioni di destinazione.

Qualcuno qui ha qualche esperienza con tale processo e potrebbe dire se quanto sopra sembra un approccio fattibile?

+0

Mi piacerebbe vedere una buona risposta a questa domanda. Oltre alla domanda originale, mi piacerebbe sapere come posso eseguire la compilazione di mingw anche su Linux (io uso mingw in Windows). Inoltre, utilizzo il framework Qt e QTestLib per il test delle unità. Grazie! –

+0

Mi piacerebbe anche vedere una buona risposta a questa domanda.IMHO, questo va a problemi di "gestione della configurazione" dato che ogni modulo "si accoppia" ad altri moduli e collegando una lib, il che significa che devi collegare implicitamente le librerie up-stream. Dal momento che ciò richiede limitazioni di lib-versioning, questo problema si complica rapidamente (ad es. DLL-hell o RPM-hell). La propagazione indiretta delle dipendenze è essenziale, nel contesto delle versioni compatibili limitate. – charley

risposta

4

Buildbot ha la nozione di buildmasters and buildslaves.

Un buildmaster si occupa di visualizzare la GUI Web, inviare e-mail, generare build e altre attività di manutenzione. I buildslaves aspettano sul buildmaster e quando viene comandato eseguono build.

Abbiamo buildbot configurato per costruire su una serie di piattaforme diverse, alcune delle quali VM, e funziona bene per noi.

6

Utilizziamo Jenkins (Integrazione contigua) e CMake (sistema di compilazione) per questo scopo. Jenkins è simile a Buildbot, cioè ha anche buildmaster e buildslave. Attualmente ho installato 8 slave per creare 4 diverse piattaforme (FC8, FC10, FC12 e Windows 7). Costruiamo sia i binari di debug che di rilascio, quindi ho dedicato uno slave per ogni piattaforma e tipo di build.

Come per le librerie di terze parti come Qt & Boost, li ho compilati su ogni piattaforma e li ho controllati in un repository separato.

@esavard: Usiamo CMake 2.8 per eseguire la compilazione incrociata, non ho usato minigw ma una ricerca rapida su google indica che è possibile. Ecco a link in un tutorial per compilare cross per Windows su Linux utilizzando CMake e miniGW.

Non ho usato Buildbot e non posso commentare le sue funzionalità ma ho pensato di menzionare un'alternativa che stiamo attualmente utilizzando.

Spero che questo aiuti.

+0

+1 per CMake ... – Macke

+0

Pensi che potrei ottenere qualcosa di simile usando qmake invece di CMake (usiamo qmake in questo momento e stavamo usando Scons prima)? –

+0

Non ho usato qmake, quindi non posso dire con certezza come funzionerebbe. [Here] (http://silmor.de/29) è un link che parla di applicazioni di Qt per la compilazione incrociata di Windows su Linux con qmake. Anche Scons è molto bravo, l'ho provato prima di optare per CMake. Siamo andati con CMake per via del suo supporto per più IDE. Abbiamo persone che usano Eclipse, Code :: Blocks, VS05, VS10 ed Emacs. Solo i problemi che ho incontrato dovevano supportare gli header precompilati usando CMake. – user258808

0

Certamente buildbot e molte macchine virtuali sono la via da seguire. Abbiamo VMWare ESX server che ospita molti build slave che durante la notte compilano la nostra applicazione. L'applicazione viene quindi testata su un'altra macchina virtuale (non lo slave di build e solo con un'installazione del sistema operativo predefinita) per verificare che funzioni e tutte le dipendenze siano pacchettizzate.

La cosa carina che vorrei fare è rendere la fase di esecuzione del test una fase automatizzata, ma non mi è stato ancora dato il tempo di farlo.