Sono coinvolto nel mantenimento di un portafoglio abbastanza ampio di applicazioni .NET. Inoltre nel portfolio ci sono applicazioni legacy costruite su altre piattaforme: C ++ nativo, moduli ECLIPS, ecc.
In questo momento ho un framework di build complesso su NAnt che gestisce le build per tutte queste applicazioni. Il framework di build usa NAnt per fare una serie di cose diverse:
- 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 ai file AssemblyInfo per incrementare i numeri di versione
- Elimina alcuni file che non dovrebbero essere inclusi nelle versioni / versioni
- Rilascia il codice nelle cartelle di implementazione
- Le cerniere si aprono a scopo di backup
- Distribuisci i servizi di Windows; avviali e fermali
- Etc.
Molte di queste cose possono essere fatte solo con NAnt da sole, ma abbiamo creato un paio di attività di estensione per NAnt per fare alcune cose specifiche per il nostro ambiente. Inoltre, la maggior parte di questi processi sopra sono generati e riutilizzati in molti dei nostri script di compilazione di applicazioni, in modo da non ripetere la logica. Quindi non è semplice codice NAnt e non semplici script di compilazione. Ci sono dozzine di file NAnt che si uniscono per eseguire una build.
Ultimamente sono stato insoddisfatto di NAnt per un paio di motivi: (1) la sintassi è semplicemente terribile - i linguaggi di programmazione su XML sono davvero orribili da mantenere, (2) il progetto sembra essere morto sulla vite; non ci sono stati un sacco di aggiornamenti ultimamente e sembra che nessuno sia davvero al timone. Cercando di farlo funzionare con .NET 4 ha causato alcuni punti deboli a causa di questa mancanza di attività.
Quindi, con tutto questo sottosquadro, ecco la mia domanda. Considerate alcune delle cose che voglio realizzare sulla base di quella lista di cui sopra, e dato che sono principalmente in un negozio .NET, ma ho anche bisogno di creare 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 di per sé, e rake . Tutti hanno pro e contro. Ad esempio, MSBuild è abbastanza potente? Ricordo di averlo usato anni fa e non sembrava avere più potere di NAnt. Voglio davvero che il mio team impari Ruby solo per creare build usando rake? È abbastanza maturo un progetto per appuntare il mio portafoglio? Powershell è "troppo vicino al metallo" e finirò per dover scrivere la mia libreria di build simile a psake per usarlo da solo?
Ci sono altri strumenti che dovrei considerare? Se tu fossi coinvolto nel mantenimento di un portafoglio .NET di notevole complessità, quale strumento di sviluppo vorresti considerare? Cosa usa attualmente la tua squadra?