Piattaforma di compilazione automatizzata per portfolio .NET: la scelta migliore? [chiuso]


10

Mi occupo di mantenere un portafoglio abbastanza ampio di applicazioni .NET. Inoltre, nel portafoglio sono presenti applicazioni legacy basate su altre piattaforme: C ++ nativo, moduli ECLIPS, ecc.

In questo momento ho un framework di build complesso in cima a NAnt che gestisce le build per tutte queste applicazioni. Il framework di build utilizza NAnt per eseguire diverse operazioni:

  • Estrai il codice da Subversion e crea tag in Subversion
  • Crea il codice utilizzando MSBuild per .NET o altri compilatori per altre piattaforme
  • Dai un'occhiata all'interno dei file AssemblyInfo per aumentare i numeri di versione
  • Elimina alcuni file che non dovrebbero essere inclusi in build / release
  • Rilascia il codice nelle cartelle di distribuzione
  • Le zip vengono codificate a scopo di backup
  • Distribuire servizi Windows; avviarli e fermarli
  • Eccetera.

La maggior parte di queste cose può essere eseguita solo con NAnt da sola, ma abbiamo creato un paio di attività di estensione per NAnt per fare alcune cose specifiche del nostro ambiente. Inoltre, la maggior parte di questi processi sopra è generalizzata e riutilizzata in molti dei nostri diversi script di compilazione delle applicazioni, in modo da non ripetere la logica. Quindi non è un semplice codice NAnt e non semplici script di compilazione. Esistono dozzine di file NAnt che si uniscono per eseguire una build.

Ultimamente sono stato insoddisfatto di NAnt per un paio di motivi: (1) la sua sintassi è semplicemente orribile - i linguaggi di programmazione su XML sono davvero orribili da mantenere, (2) il progetto sembra essere morto sulla pianta; non ci sono stati molti aggiornamenti ultimamente e sembra che nessuno sia davvero al timone. Cercare di farlo funzionare con .NET 4 ha causato alcuni punti dolenti a causa di questa mancanza di attività.

Quindi, con tutto quel background fuori mano, ecco la mia domanda. Date alcune delle cose che voglio realizzare sulla base dell'elenco precedente e dato che sono principalmente in un negozio .NET, ma ho anche bisogno di costruire progetti non.NET, c'è un'alternativa a NAnt che dovrei considerare passare a?

Le cose sul mio radar includono Powershell (con o senza psake ), MSBuild da solo e rake . Tutti questi hanno pro e contro. Ad esempio, MSBuild è abbastanza potente? Ricordo di averlo usato anni fa e non sembrava avere la stessa potenza di NAnt. Voglio davvero che il mio team impari Ruby solo per fare build usando il rake? Psake è davvero abbastanza maturo per un progetto a cui aggiungere il mio portfolio? Powershell è "troppo vicino al metal" e finirò per dover scrivere la mia libreria di build simile a psake per usarla da sola?

Ci sono altri strumenti che dovrei considerare? Se fossi coinvolto nel mantenimento di un portafoglio .NET di notevole complessità, quale strumento di costruzione guarderesti? Cosa utilizza attualmente il tuo team?

Risposte:


2

Se stai già utilizzando TeamCity, dovresti essere in grado di utilizzare le sue funzionalità esistenti per la maggior parte di ciò di cui hai bisogno. Supporta nativamente la creazione di file .sln di Visual Studio e se hai bisogno di cose extra fatte a tutti i tuoi progetti, puoi modificare i file .targets di .NET Framework sui tuoi computer di costruzione, quindi non devi modificare i singoli file csproj.

Eseguirà automaticamente il checkout da Subversion, zip artefacts, ti permetterà di controllare quali file sono considerati artefatti distribuibili. La nuova versione (6.0) consente anche più passaggi di compilazione, quindi è possibile implementare xcopy di artefatti in una condivisione.

Puoi anche scrivere le tue app / attività che possono essere eseguite come parte di una build (tramite il runner della riga di comando) e fare tutto ciò che vuoi (come avviare / interrompere i processi di Windows).


3

Ci avviciniamo alle cose come tre diverse attività, Build, Deploy e Install. Usiamo TFS per il server di build con alcuni callout a Powershell. Quindi utilizziamo Powershell per realizzare tutte le parti di distribuzione e installazione che sono abbastanza complesse e su più server sia locali che cloud. Sono stato molto contento di imparare Powershell su MSBuild o altri strumenti. Ho anche avuto una buona esperienza con Visual Build in passato.


2

Dai un'occhiata a hudson e MSBuild in coppia. Il potere deriva dalle forti capacità di MSBuild e dai plugin hudson .

Ad esempio, è possibile utilizzare hudson ed eseguire gli script NAnt fino a quando non si esegue la migrazione a MSBuild e quindi è possibile eseguire anche gli script MSBuild.

Affrontare in modo specifico i tuoi punti:

  • Sovversione e tag
  • MSBuild
  • È stato chiesto di dare un'occhiata a AssemblyInfo su SO, ma la soluzione potrebbe non essere di tuo gradimento
  • MSBuild può eliminare facilmente i file
  • "Rilascio del codice nelle cartelle di distribuzione": è possibile fare in modo che il sistema di generazione salti tale passaggio e lo distribuisca automaticamente utilizzando una serie di metodi. Oppure puoi FTP se vuoi.
  • MSBuild può comprimere
  • Servizi Windows, di nuovo MSBuild è tuo amico qui.

Grazie per le informazioni su MSBuild. Sembra che ci sia più potere lì rispetto all'ultima volta che ho provato a usarlo. Per quanto riguarda Hudson, questo offre vantaggi oltre a quelli forniti da altri server CI, come TeamCity, che attualmente utilizziamo? Sto cercando di evitare di stravolgere troppo lo status quo qui e sostituire il nostro server CI allo stesso tempo sostituiamo i nostri script di build sembra più doloroso.
RationalGeek,

Secondo la mia modesta opinione, penso che TeamCity sia fantastico ... e hudson sia migliore. Possono essere visti svolgere le stesse funzioni, fino a quando non vuoi fare qualcosa di fantastico, quindi vince Hudson. Onestamente, hudson è in grado di analizzare (stylecop / fxcop) -> build-> test-> tag-> backup locale e offsite-> deploy mantenendo aggiornati tramite RSS, SMS, XFD.
Steven Evers,

Hmm ... niente in quella lista è impossibile con TeamCity, ma forse è più facile con Hudson. Ad ogni modo, a meno che non colpiamo alcuni punti dolenti con TC, non credo che cambieremo presto.
RationalGeek,

@jkohlhepp: la difficoltà è che ci sono molte molte soluzioni nello stesso spazio. Alla fine della giornata, hudson è semplice ed è gratuito al 100% . IIRC, una cosa che TC potrebbe avere su Hudson è la costruzione di più agenti.
Steven Evers,

2

Uso Automated Build Studio . Voglio liberarmene.

L'unico motivo per cui non passo a MS Build al 100% o Team Foundation Build è il costo che comporterà per ricostruire gli script che funzionano perfettamente oggi. Gli script non cambiano molto ...

Tuttavia, per il prossimo prodotto, questo sarà Team Foundation Build senza alcuna esitazione per i seguenti motivi principali (sono molti di più):

  • È facile da implementare (ultima versione: 2010)
  • È completamente integrato con Visual Studio e Team Foundation Server
  • Sta diventando uno standard come MS Build
  • È gratuito con Bizspark (per startup)

Dato che sei anche in .NET, ti consiglio caldamente di usare TFB.

Se non puoi richiedere Bizspark o non puoi permetterti di acquistare la licenza, puoi scegliere CruiseControl.NET + MS Build e alcuni script di supporto. In una grande società di servizi per cui ho lavorato, avevamo utilizzato CruiseControl.NET per costruire, testare, distribuire e segnalare tutti i nostri progetti. Comprendeva la distribuzione automatica del servizio Web.


Non avevo preso in considerazione questa opzione, ma non penso che sarebbe un'opzione realistica per noi poiché non stiamo usando affatto TFS e abbiamo posto il veto ai tentativi di passare ad essa in passato (per budget e altri motivi). Ma grazie per il suggerimento che è un'idea interessante.
RationalGeek,

Non è così espansivo. Se la tua gestione è sensibile al prezzo, MS Build sarà la soluzione perfetta. Lavoravo solo con MS Build + CruiseControl.NET e funzionava benissimo! Lo aggiungerò nella mia risposta.

@Pierre 303: Per motivi di curiosità, perché vuoi sbarazzarti di Automated Build Studio?
RationalGeek,

@Pierre 303: la spesa di TFS non è l'unica preoccupazione. Il mio negozio fa parte di una più grande impresa, e si sono standardizzati su Subversion e altri strumenti ed essere "non standard" e andare con TFS causa problemi politici.
RationalGeek,

@jkohlhepp: non è facile da usare, non è ben integrato con Visual Studio (almeno la versione che ho) ed è tutt'altro che uno standard.

2

FinalBuilder può eseguire tutti gli elementi richiesti, con una bella interfaccia grafica e un'applicazione server builder inserita gratuitamente.


2

Attualmente sto facendo quello che stai facendo (cioè dalla costruzione al packaging alla distribuzione) usando MSBuild (> 3000 righe di script). L'IC utilizza CruiseControl.Net e spero di poter passare a TeamBuild in futuro. MSBuild è ingombrante (programmazione in XML) ma è piuttosto potente specialmente per l'elaborazione batch e il monitoraggio delle dipendenze. È attivamente gestito e migliorato nelle nuove versioni .Net ed è la base del sistema di compilazione in Visual Studio e TFS. Anche i file di progetto di Visual Studio sono in realtà progetti MSBuild e posso collegarmi a vari punti di estensione. Il pacchetto di estensione MSBuildha molte attività aggiuntive ed è banalmente facile creare le proprie attività programmaticamente. Suggerisco di riflettere seriamente su MSBuild. Ultimamente sto anche imparando PowerShell e trovo facile per alcune attività specialmente nella fase di implementazione, come l'installazione e la configurazione di certificati, IIS ecc.

Modifica il progetto MSBuild in VisualStudio in quanto comprende la sintassi e ti dà intellisense. Ecco alcune altre buone utilità che ti aiuteranno con MSBuild.
MSBuild Launch Pad : per le estensioni della shell
MSBuild SideKicks : modifica, esegue ed esegue il debug degli script graficamente.


1

Forse stai chiedendo troppo al tuo script di build e non abbastanza al tuo server di build - con team city, potresti facilmente avere semplici script che realizzano ciascuno dei tuoi proiettili, in qualsiasi lingua o stack che abbia senso e usi le attività di build di TeamCity per concatenare le cose come appropriato.


Sembra che la maggior parte di queste risposte stiano equiparando CI agli script di compilazione. Ho sempre considerato gli script di compilazione come gli smart e il server CI come la cosa che dà il via agli build in base ai trigger. Ma forse hai ragione e devo ripensarci.
RationalGeek,

1

Consiglio vivamente TeamCity, è facile da configurare e configurare. MSBuild è preferibile a NAnt per una semplice ragione che tutti i file di progetto / soluzione in vs2008 / 2010 sono tecnicamente file MSBuild, ma è possibile configurare TeamCity con MSBuild o NAnt.

OfCourse, TeamCity ti costerà. Personalmente ho dato una scelta preferirei il rake, semplicemente perché l'attrito con gli strumenti Ruby rispetto ad altri, anche se psake è anche un buon candidato.


1
FYI TeamCity è gratuito se hai meno di 20 configurazioni di build e meno di 20 utenti. Inoltre, se sei un progetto open source, puoi richiedere loro una licenza illimitata gratuita.
RationalGeek,

0

Hai considerato Hudson ? Potrebbe essere un po 'una seccatura, dal momento che richiede l'esecuzione del server delle app Java, ma penso che potrebbe permetterti di usare il tuo attuale script NAnt e costruirlo sopra usando altri strumenti.


Hudson è più una piattaforma di integrazione continua, e non una vera piattaforma di compilazione. Disponiamo di un server CI - TeamCity, che funziona perfettamente con NAnt. Tuttavia, i motivi per cui voglio sostituire NAnt sono perché mantenere gli script NAnt è doloroso. L'uso degli script correnti tramite Hudson non risolve questo problema. Grazie per il suggerimento, comunque.
RationalGeek,

IMHO Hudson è molto limitato in ciò che fa correttamente con i progetti VS. I checkout non sono legati ai changeset come ti aspetti e dietro le quinte non sta facendo altro che eseguire un file batch che crei attraverso un'interfaccia web e molti plug-in. Segnalarlo è carino se riesci a farlo funzionare bene.
Bill
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.