Gestione build: esiste?

3

Voglio qualcosa che non sono stato finora in grado di trovare in nient'altro che su giornali e libri teorici. Se non esiste sono piuttosto sbalordito perché sembra che molte persone usino questi tipi di sistemi e che funzionino molto bene. Forse quello di cui ho bisogno è una specie di combinazione di cose, non ne sono sicuro. Ecco i miei requisiti per il sistema:

  • È possibile eseguire il hook in SVN tramite il check-in.
  • Può configurare componenti indipendenti come "pipeline" del progetto
    • Intendo dire che un check-in su un componente attiva quel componente per creare, eseguire test unitari e sputare un distributore.
  • Può configurare componenti che dipendono da altri componenti
    • Se eseguo il check-in per il componente A e il componente B dipende dal componente A, il componente B ha una dipendenza A aggiornata e ricompila al completamento del componente A.
  • Utilizza processi di compilazione nativi come msbuild o make.
    • Non devo configurare qualcosa di completamente nuovo solo per questo.
  • Se una dipendenza fallisce, i componenti a monte non la aggiornano, ma aggiorneranno altri componenti che non hanno avuto esito negativo.

Questa è la fine del server di build. Voglio anche l'integrazione lato sviluppatore.

  • Un nuovo sviluppatore dovrebbe essere in grado di eseguire un comando che ottiene tutto e crea tutto per la prima volta.
    • Ciò includerebbe tutti i componenti per un dato progetto.
  • La stessa build, aggiornamento, processo di creazione avviene sulla macchina di uno sviluppatore.
  • Uso di qualsiasi IDE

Tutto quanto sopra è automatizzato . La mia squadra attualmente ha questo, ma fa quasi tutto a mano: (

Quello che sto descrivendo è descritto in molti posti, tra cui il libro Continuous Delivery e il documento intitolato Continuous Release. Il più vicino che riesco a trovare finora è Maven, ma non sembra avere la funzione "può usare il sistema di costruzione nativo" (gli dici che ogni file che vuoi compilare e il compilatore / linker ....) un file make XML). Sembra anche molto orientato verso Java e voglio qualcosa di linguistico agnostico ... in effetti voglio qualcosa che non costruisca necessariamente programmi, potrebbe costruire qualcosa che ha bisogno di qualche forma di compilazione.

Quindi, come? Che cosa? Dove? e quanto?

    
posta Crazy Eddie 04.07.2011 - 04:41
fonte

4 risposte

3

Forse mi sto completamente sbagliando, ma sono abbastanza sicuro che stai cercando un server di build. Ho utilizzato CruiseControl.Net per anni, che è uno spin off di CruiseControl e NAnt , uno spin off di Ant . Poiché CruiseControl è in grado di eseguire script NAnt, è possibile configurare il server di build in modo da eseguire praticamente qualsiasi cosa. Sebbene le due tecnologie siano scritte in .Net, non si limitano semplicemente alla compilazione di progetti .Net.

Meglio di tutti sono entrambi open source: D

EDIT: Scusa, ho dimenticato di menzionare che gli stessi script NAnt possono essere eseguiti sulle macchine degli sviluppatori. Il fatto è che i tuoi progetti di dipendenze di terze parti dovrebbero essere nel controllo del codice sorgente e del tuo codice. Ho sempre aggiunto una cartella lib che contiene tutte le mie librerie di terze parti per la tua stessa identica situazione. Il mio pensiero è che voglio TUTTE le dipendenze dei miei codici nel controllo del codice sorgente in modo che tutto ciò che devo fare per creare il software, anche su una macchina nuova di zecca, sia il checkout del codice e lo compili, questo è tutto!

    
risposta data 04.07.2011 - 05:19
fonte
2

Sembra che tu voglia un concetto come il vecchio Borland Gauntlet. Un elemento chiave di questo era:

  1. I checkin dovevano superare il raduno, altrimenti sarebbero stati contrassegnati o ripristinati.
  2. Le build automatiche verrebbero eseguite al momento del check-in.

Oggi potresti fare un sacco di server automatizzati, usando solo una semplice installazione di Jenkins [ex Hudson]. Controlla il repository di subversion e controlla il codice più recente, e prova a crearlo, e se passasse sarebbe contrassegnato in verde, e se fallisse verrebbe contrassegnato in rosso.

Per quanto riguarda un qualche tipo di sistema di promozione automatica, non vorrei mai tentare una cosa del genere in modo automatico, poiché ritengo che sarebbe una sorta di creatore automatico di mess. Farei affidamento sullo strumento automatico per i rami "green light" del codice e manterrei sempre un "lead" umano o "engineer di integrazione" o "tenente di codice" nel ciclo di fusione.

Ma se davvero volevi una specie di push / univer / pull automatico, ed era mio compito costruirlo per te, la prossima cosa che farei è scavare Subversion e passare a Mercurial o Git.

Se vuoi qualcosa di "indipendente dal linguaggio" ma non agnostico rispetto alla piattaforma, e che può fare molto più di qualsiasi semplice strumento di costruzione, allora esaminerei Final Builder server. In origine era uno strumento di sviluppo Delphi, ma ora crea tutti i tipi di materiale incluso Delphi, Visual C ++, java e altre cose. Ha un vero e proprio "quasi qualsiasi tipo di file di computer o sistema di automazione dei processi di spostamento dei dati" che può costruire e assemblare ogni tipo di materiale, non solo il software. Sembra, infatti, lo strumento di automazione IT più avanzato in circolazione.

    
risposta data 04.07.2011 - 05:08
fonte
2

È utile il "controllo gated" nel suono TFS? link

No? Ok. Quindi, tutto inizia con un trigger. Questo può limitare le tue scelte a meno che tu scrivi alcuni codici personalizzati .

Questa è una risposta parziale: "" "Se eseguo il check-in per il componente A e il componente B dipende dal componente A, il componente B ha la dipendenza A aggiornata e ricompila al completamento del componente A." "" - lo strumento di compilazione, qualunque cosa sia deve sapere come fare questo. So che VS2010 di solito può.

Quello che hai descritto mi sembra uno strumento abbastanza personalizzato (e ci sono decine di modi per costruire cose, fidati di me. Un sito web sarebbe molto diverso da un progetto incorporato).

Quindi, la mia raccomandazione è di scrivere TUTTO ciò che è personalizzato da soli. Naturalmente, ci sono strumenti che possono scaricare il codice sorgente per te, uno strumento di costruzione, possibilmente uno strumento che invia i risultati via e-mail, ecc. Ma ciò di cui hai bisogno è personalizzato. Quindi qualcuno dovrebbe spendere 2 settimane in anticipo e basta scriverlo. E poi anche modificarlo più tardi.

Assicurati di utilizzare un linguaggio interpretato laconico, in modo che questo strumento possa essere facilmente modificato da chiunque. Python è buono; PowerShell potrebbe anche fare.

Non penso che tu abbia bisogno del file di configurazione XML se seguirai questa strada; fallo nel codice Ho memorizzato le impostazioni in un file .py separato. Non hai bisogno di un parser per questo. Puoi semplicemente accedere a quella roba direttamente.

Ho letto un post sul blog da qualche parte che non riesco a trovare ora. Ha opinato che XML come strumento fa schifo per la configurazione degli strumenti di costruzione, perché quando si tratta di una logica imperativa e non dichiarativa che alcuni strumenti non possono gestire. "Cosa c'è di sbagliato nell'uso del codice?" - l'autore ha scritto. Sono d'accordo con lui.

Dove lavoro gli script di costruzione sono fatti da qualcuno che non considero un grande programmatore, quindi il nostro sistema di costruzione fa schifo, ma la politica mi rende impossibile dirlo chiaramente. Spero che tu non sia legato alle stesse catene.

A volte devi sacrificare un fine settimana e farlo prima che un comitato si riunisca e decida una "soluzione" schifosa.

    
risposta data 04.07.2011 - 05:21
fonte
0

Sì, ma finora non ho trovato il perfetto coltellino svizzero per questo ...

Per il lato server uso Hudson / Jenkins . Personalmente raccomanderei Jenkins, è un fork di Hudson in seguito a qualche disavventura politica da parte di Oracle dopo che hanno assunto il progetto da Sun.

Nel mio attuale setup avevo già script di compilazione indipendenti per ogni progetto, mettere tutto questo in Hudson era un gioco da ragazzi e non richiedeva alcuna modifica ai miei script di build solo alcune informazioni di configurazione sul lato server. Modificando ulteriormente la configurazione, sono riuscito a farlo quasi tutto ciò che si menziona + generazione automatica di portali web per ogni progetto contenente la documentazione più recente, le metriche del codice e i risultati dei test. Le build sono pianificate per verificarsi una volta al giorno (build notturno) in cui una suite di test più complessa viene eseguita e attivata in seguito a commit con una prova leggera per fornire un feedback rapido.

Dal punto di vista del cliente, non ho ancora ottenuto il check-out e il build con un solo clic, ma in realtà è piuttosto vicino. Sto usando un framework di gestione delle dipendenze che consente un disaccoppiamento delle librerie molto efficace tra loro. È quindi possibile per uno sviluppatore ottenere solo una singola parte del tutto, ma essere ancora in grado di creare senza difficoltà poiché tutte le dipendenze vengono automaticamente trasferite in un repository e rese disponibili.

Per questo motivo l'unico pulsante ha reso tutto diventato quasi obsoleto, il che ha detto che sarebbe stato possibile utilizzare lo stesso framework delle dipendenze per eseguire questa attività e ottenere tutte le informazioni per me. Per questo uso Maven , non perfetto ma vale la pena investire. Funziona a meraviglia per le configurazioni Java, tuttavia gli equivalenti di dot net sembrano trascinarsi in qualche modo.

Spero che questo aiuti

    
risposta data 04.07.2011 - 19:56
fonte

Leggi altre domande sui tag