Modo efficace per garantire un "sistema pulito di ardesia" per un servizio di integrazione continua


10

Vogliamo creare un servizio di integrazione continua (CI) per il nostro progetto. Tale servizio di CI dovrebbe controllare tutti gli aspetti della vita del progetto, compresa la distribuzione.

Cioè, vogliamo che un agente CI ad ogni iterazione prenda un sistema pulito (in particolare Ubuntu Server), distribuisca lì il nostro progetto ed esegua test.

Probabilmente scriveremmo il servizio CI da zero, poiché il nostro ecosistema è piuttosto insolito. La domanda è: come fornire efficacemente un sistema di ardesia pulito per ogni iterazione CI?

La distribuzione del progetto installa alcuni pacchetti Debian, configura diversi siti nginx e installa anche alcuni pacchetti in un gestore di pacchetti specifico per la lingua di implementazione (LuaRocks), a livello di sistema. Niente di più invadente di quello (credo). Quindi, è più importante essere in grado di impostare velocemente un'ardesia pulita (entro un minuto su hardware moderno, più veloce - migliore) che garantire isolamento e pulizia assoluti.

Vedo due modi per fare ciò di cui abbiamo bisogno:

  • O imposta una prigione di qualche tipo (come lxc, forse).
  • Oppure installa qualche macchina virtuale in grado di fare istantanee e usarle.

Ma a questo punto non ho abbastanza informazioni per decidere.

Cosa consiglieresti? Altre opzioni? Qualche nome di strumento specifico?

Nota: il servizio CI verrebbe eseguito all'interno di un guest Citrix XenServer. Le soluzioni a pagamento sono OK se i prezzi sono ragionevoli. (Di solito non sono ragionevoli in questo campo.) Soluzioni CI remote non OK.

Risposte:


5

Dai un'occhiata a Chef / Vagrant . Non sono sicuro se sarà abbastanza veloce, ma qualcosa da esaminare.

Nel caso in cui non si abbia familiarità con Chef, si tratta di un server progettato per consentire il provisioning di server basato su codice semplice. Consiglierei di dare un'occhiata a uno dei webcast. Webcast Chef Django

Vagabondo, veewee, chef-solo e coltello-solo penso che questo copra la maggior parte di ciò che vuoi fare.

Post sul blog di Vagrant Un post sul blog che mostra una rapida configurazione di un server utilizzando Vagrant.


Grazie. Ti interessa fornire maggiori dettagli nella tua risposta?
Alexander Gladysh,

Non l'ho usato io stesso per questo, quindi tutto ciò che posso fare è pubblicare alcuni link che penso dovrebbero aiutare.
Philip Tinney,

13

Dai un'occhiata a Jenkins . Dispone di plug-in che ti consentono di eseguire build in macchine virtuali in VMWare o VirtualBox o nel cloud Amazon / a Eucalyptus . Per le macchine virtuali eseguite nel cloud, è possibile specificare uno script init in cui è possibile eseguire operazioni come l'installazione di pacchetti.


Grazie, ma Jenkins è un server CI e vorrei sapere come costruirne uno da soli.
Alexander Gladysh,

2
@AlexanderGladysh Perché vuoi reinventare la ruota? Le build Jenkins possono eseguire qualsiasi cosa, dai file make a semplici script di shell, inoltre ha un'interfaccia robusta, un ottimo supporto e molti plug-in. Anche se la tua build è molto complicata, deve essere uno script di shell da qualche parte che jenkins può eseguire
TheLQ

Anche se non vuoi usare Jenkins, penso che qualcosa basato sul cloud sarebbe la strada da percorrere per te. È possibile personalizzare un'immagine della macchina per fornire il software desiderato e aggiungere solo configurazione e codice da testare all'avvio dell'istanza per ridurre i tempi di avvio.
Lars Kotthoff,

Comunque, Jenkins o nessun Jenkins, cosa usare per ottenere rapidamente istantanee del sistema operativo pulite? (Per favore, smetti di menzionare i cloud di terze parti - questo deve essere eseguito sui nostri server.)
Alexander Gladysh,

Esegui un cloud Eucalyptus / OpenStack / ... sui tuoi server?
Lars Kotthoff,

2

Userei l'infrastruttura VM e creerei un modello di base, o userei il cloud come suggerito da @LarsKotthoff. È facile farli girare velocemente e puoi essere sicuro da dove sei partito.

Tuttavia, alla fine avrai bisogno di qualcosa al di fuori di quella VM per orchestrare ciò che sta succedendo (imposta la macchina e avvia qualsiasi processo tu voglia sulla macchina). Guarderei Jenkins per la sua capacità di catturare l'output di script per successive ispezioni.

Sebbene Jenkins abbia iniziato come server CI, numerose organizzazioni con cui ho lavorato ora lo usano per molto di più, è davvero uno strumento per dare il via alle cose (manualmente o pianificato) e acquisire risultati, e convalidare ciò che è successo è come previsto. Ed è molto flessibile.


Grazie, ma vorrei configurare le cose direttamente all'interno dell'istanza di Xen VM, non all'esterno: è molto più facile organizzare nel mio caso specifico. Esaminerò Jenkins, ma sto ancora cercando una soluzione più ristretta.
Alexander Gladysh,

Inoltre, si prega di elaborare "utilizzare l'infrastruttura VM e creare un modello di base".
Alexander Gladysh,

2

Vogliamo creare un servizio di integrazione continua (CI) per il nostro progetto. Tale servizio di CI dovrebbe controllare tutti gli aspetti della vita del progetto, compresa la distribuzione.

Jenkins è stato citato da parecchi. Puoi andare a fondo con gli script, ma Jenkins ti fornirà la stessa flessibilità con meno spese generali per metterlo insieme.

Cioè, vogliamo che un agente CI ad ogni iterazione prenda un sistema pulito (in particolare Ubuntu Server), distribuisca lì il nostro progetto ed esegua test.

La distribuzione del progetto installa alcuni pacchetti Debian, configura diversi siti nginx e installa anche alcuni pacchetti in un gestore di pacchetti specifico per la lingua di implementazione (LuaRocks), a livello di sistema. Niente di più invadente di quello (credo). Quindi, è più importante essere in grado di impostare velocemente un'ardesia pulita (entro un minuto su hardware moderno, più veloce - migliore) che garantire isolamento e pulizia assoluti.

È qui che le immagini delle macchine virtuali sono utili. Puoi impostare la tua immagine pulita e fare in modo che ogni macchina lanci una forchetta. L'immagine originale non viene mai modificata, ma i tuoi test non conosceranno la differenza. Dovresti sicuramente riuscire a far funzionare un'immagine bootstrap in un minuto.

Le soluzioni a pagamento sono OK se i prezzi sono ragionevoli. (Di solito non sono ragionevoli in questo campo.) Soluzioni CI remote non OK.

Se stai cercando più macchine in esecuzione contemporaneamente, controlla Nimbula (sono spudorato; lavoro per loro). Per distribuzioni più piccole, è gratuito e ti consente di mettere insieme il tuo cloud privato per i test ... o qualsiasi altra cosa. Tra Jenkins e un file di orchestrazione, puoi far girare i server host, testare i client e tutto il resto per eseguire automaticamente il gammut completo del codice di test senza alcuna interazione.


Ugh. Forse sono lento oggi, ma ho cercato di scavare nel sito di Nimbula, ma non riesco a capire il motivo dietro il marketing. Ti interessa indicare un testo sano che descriva come fare ciò di cui ho bisogno? (Vale a dire creare un modello di macchina ospite e, dallo script, creare un'istanza e ucciderlo per ogni sessione CI.)
Alexander Gladysh,

@AlexanderGladysh È utile se si utilizzano molte macchine per compilare da / un sacco di lavoro CI. È inutile se non si dispone di un carico di lavoro sufficiente per garantire un cluster di almeno 3 macchine.
Jeff Ferland,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.