Estou envolvido na manutenção de um portfólio bastante grande de aplicativos .NET. Também estão no portfólio aplicativos herdados criados sobre outras plataformas - C ++ nativo, ECLIPS Forms, etc.
Eu tenho uma estrutura de compilação complexa em cima do NAnt agora que gerencia as compilações para todos esses aplicativos. A estrutura de construção usa o NAnt para fazer várias coisas diferentes:
- Retire o código do Subversion, bem como crie tags no Subversion
- Crie o código usando o MSBuild for .NET ou outros compiladores para outras plataformas
- Espie dentro dos arquivos AssemblyInfo para aumentar os números de versão
- Exclui certos arquivos que não devem ser incluídos nas compilações / liberações
- Libera código para pastas de implantação
- Fecha o código para fins de backup
- Implantar serviços do Windows; comece e pare-os
- Etc.
A maioria dessas coisas pode ser feita apenas com o NAnt por si só, mas criamos algumas tarefas de extensão para o NAnt fazer algumas coisas específicas ao nosso ambiente. Além disso, a maioria dos processos acima é genérica e reutilizada em muitos de nossos diferentes scripts de criação de aplicativos, para que não repitamos a lógica. Portanto, não é um código NAnt simples, nem scripts de construção simples. Existem dezenas de arquivos NAnt que se reúnem para executar uma compilação.
Ultimamente, tenho ficado insatisfeito com o NAnt por duas razões: (1) a sintaxe é péssima - as linguagens de programação no XML são realmente horríveis de manter, (2) o projeto parece ter morrido na videira; Ultimamente, não houve muitas atualizações e parece que ninguém está realmente no comando. Tentar fazê-lo funcionar com o .NET 4 causou alguns problemas devido a essa falta de atividade.
Então, com todo esse histórico fora do caminho, aqui está minha pergunta. Dadas algumas das coisas que desejo realizar com base na lista acima, e considerando que estou principalmente em uma loja .NET, mas também preciso criar projetos que não sejam do .NET, existe uma alternativa ao NAnt que devo considerar Mudando para?
As coisas no meu radar incluem Powershell (com ou sem psake ), MSBuild por si só e rake . Todos eles têm prós e contras. Por exemplo, o MSBuild é poderoso o suficiente? Lembro-me de usá-lo anos atrás e não parecia ter tanto poder quanto o NAnt. Eu realmente quero que minha equipe aprenda Ruby apenas para fazer builds usando rake? O psake é realmente maduro o suficiente para um projeto para fixar meu portfólio? O Powershell está "muito próximo do metal" e acabarei tendo que escrever minha própria biblioteca de compilação semelhante ao psake para usá-lo por conta própria?
Existem outras ferramentas que devo considerar? Se você estivesse envolvido na manutenção de um portfólio .NET de complexidade significativa, qual ferramenta de construção você procuraria? O que sua equipe usa atualmente?