2012-03-28 12 views
8

Sono uno sviluppatore Qt/C++. Vorrei installare un ambiente di integrazione continua per cui dopo aver commesso il codice sorgente, si innesca un processo di compilazione che costruiscono il codice per le 3 piattaforme che sto usando:Sistema di creazione continua per Qt

  • Linux
  • OS X
  • Win32

Se possibile, come impostare tale ambiente. Qualsiasi suggerimento o link sono i benvenuti. Ho letto in giro su Jenkins, ma non riesco a trovare alcun buon tutorial per questo.

+0

Può essere il sistema SVN a cui viene eseguito il commit del codice sorgente con un'API che è possibile utilizzare per acquisire tali eventi (come commit)? – badmaash

+2

Questa non è una domanda di programmazione. Probabilmente appartiene a http://programmers.stackexchange.com/ – Gray

risposta

0

Certo che è possibile. La maggior parte dei sistemi di controllo delle versioni è in grado di eseguire script personalizzati sul lato server. Alcuni di loro (git, per esempio), hanno degli hook per ottenere lo stesso localmente. Dai un'occhiata a git's post-commit hook.

Tutto ciò che serve è creare uno script che attiverà build multipiattaforma.

0

La maggior parte dei sistemi di controllo delle versioni consente ganci post-commit per consentire di avviare eventi come build. In alternativa, i sistemi di compilazione possono essere configurati per eseguire regolarmente il polling di un repository di controllo di origine e gestire la propria pianificazione di build (questo è il modo in cui utilizziamo Jenkins).

Qualcosa da tenere a mente è il tempo necessario per eseguire una compilazione completa su piattaforme e il numero tipico di check-in in tale intervallo. È possibile trovare i check-in di batch un modo migliore di creare build di integrazione continua se si dispone di un team di dimensioni adeguate o di risorse del server di build limitate. Altrimenti il ​​tuo sistema di compilazione potrebbe rapidamente finire per cercare di recuperare.

Per quanto riguarda la possibilità di creare su tutte le piattaforme di destinazione, ciò dipende dalla catena di strumenti.

2

Due soluzioni che vengono alla mia mente:

buildbot

BuildBot è un sistema di integrazione continua altamente personalizzabile scritto in Python. Il componente principale offre una bella interfaccia grafica basata sul web per monitorare e attivare build; i componenti slave vengono messi sulle macchine target (di solito macchine virtuali ma potrebbero essere il laptop Mac di uno degli sviluppatori). I documenti sono sufficienti per creare un sistema di base, la personalizzazione potrebbe essere un po 'complicata (almeno lo era per me). Usando i ganci commit/push forniti dai sistemi VC è possibile attivare facilmente i build master e trigger attraverso gli slave. Supporta anche build incrementali (un must se il tuo progetto è grande).

CDash

Sviluppato da CMake di autori, CDash è una raccolta di applicazioni web costruisce provenienti da tutta la rete, non è esattamente quello che hai chiesto, ma penso che sia la pena di provare. Molto potente se si dispone di un team di sviluppatori in grado di inviare continuamente risultati di generazione sulle proprie macchine al server (e se si utilizza CMake è quasi trasparente). Non è possibile attivare build dal server come Buildbot, ma è possibile impostare un gruppo di VM con un cron che controlla le modifiche e nel caso esegua la build e invia i risultati a CDash

+0

Intendevi BuildBot? Devo costruire il mio progetto con g ++ su Unix e Mac ma penso che sto usando MSVC2008 per compilarlo sotto Windows. Come è possibile con BuildBot gestire sistemi non unix? Ho preparato una macchina virtuale pronta per la compilazione sotto windows, ma questo approccio è soggetto a errori e non molto automatico ... – linello

+0

Io uso la toolchain MinGW per costruire sotto windows usando qmake, ma stiamo progettando di migrare a CMake che può gestire progetti VS. In entrambi i casi uno schiavo di BuildBot può eseguire la build. – Masci

+0

Usiamo buildbot CI per lo sviluppo Qt multipiattaforma (Mac, Windows, Linux) e funziona bene (repository SVN e git). Il supporto per la costruzione di diversi rami git potrebbe essere migliore. –

2

Jenkins supporta questa funzionalità tramite plugin per tutti i principali sistemi di controllo del codice sorgente. Se stai seriamente pensando di utilizzare Jenkins (e lo consiglio vivamente), considera l'acquisto di John Ferguson Smart's Jenkins: The Definitive Guide.

4

suggerisco anche Jenkins per diversi motivi:

  • Sarà eseguito su tutte le piattaforme che hai elencato.
  • Può essere configurato per avviare una compilazione quando il repository viene aggiornato (suggerimento: configurare il lavoro su "Poll SCM" e non sarà necessario muck con lo strumento SCM per indurlo a dire a Jenkins di iniziare a costruire).
  • Fornisce un buon supporto (principalmente tramite plug-in) per il test dell'unità. [Sei progetto sta facendo unit test, giusto?]
  • Il prezzo è giusto

un problema più grande sta per avere è che per quanto ne so, Qt in realtà non fanno cross-compilazione per le altre piattaforme ben . Usando Jenkins (e i plugin appropriati), dovresti essere in grado di risolverlo.

Un metodo che viene rapidamente in mente è quello di avere un'istanza di Jenkins su ogni piattaforma. Ogni istanza è responsabile della creazione della versione per la propria piattaforma. Alla fine della build, gli artefatti creati vengono tutti collocati in una posizione condivisa e comune.

+5

> [un'istanza di Jenkins su ogni piattaforma] - Lo slave Jenkins su ciascuna piattaforma sarebbe migliore - in questo modo si ha un controllo centrale, non è necessario aggiornare ogni istanza, gli artefatti sono memorizzati sul master, ecc. –

Problemi correlati