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?