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?
fonte
Eu uso o Automated Build Studio . Eu quero me livrar disso.
A única razão pela qual eu não mudo para 100% MS Build ou Team Foundation Build é o custo que envolverá para reconstruir os scripts que funcionam perfeitamente hoje. Os scripts não mudam muito ...
No entanto, para o próximo produto, será o Team Foundation Build sem qualquer hesitação pelos seguintes motivos (são muitos mais):
Como você também está no .NET, recomendo que você use o TFB.
Se você não pode solicitar o Bizspark ou não pode comprar a licença, pode optar pelo CruiseControl.NET + MS Build e por alguns scripts de suporte. Em uma grande empresa de serviços públicos em que trabalhei, tínhamos usado o CruiseControl.NET para criar, testar, implantar e relatar todos os nossos projetos. Ele incluiu a implantação automática de serviços da web.
fonte
O FinalBuilder pode executar todos os itens solicitados, com uma boa interface gráfica do usuário e um aplicativo de servidor do construtor lançado gratuitamente.
fonte
Atualmente, estou fazendo o que você está fazendo (ou seja, do build ao empacotamento até a implantação) usando o MSBuild (> 3000 linhas de scripts). O IC está usando o CruiseControl.Net e espero poder mudar para o TeamBuild no futuro. O MSBuild é complicado (programação em XML), mas é bastante poderoso, especialmente o processamento em lote e o rastreamento de dependências. Ele é mantido e aprimorado ativamente nas novas versões .Net e é a base do sistema de criação no Visual Studio e no TFS. Também os arquivos de projeto do visual studio são na verdade projetos do MSBuild e posso conectar-me a vários pontos de extensão. O pacote de extensão MSBuildpossui muitas tarefas adicionais e é trivialmente fácil criar suas próprias tarefas programaticamente. Eu sugiro que o MSBuild pense seriamente. Ultimamente, também estou aprendendo PowerShell e facilitando determinadas tarefas, especialmente na fase de implantação, como instalar e configurar certificados, IIS etc.
Edite o projeto MSBuild no VisualStudio, pois ele compreende a sintaxe e fornece o intellisense. Aqui estão alguns outros utilitários que ajudarão o MSBuild.
Plataforma de Lançamento do MSBuild - Para extensões de shell
MSBuild SideKicks - Editar, executar e depurar scripts graficamente.
fonte
Talvez você esteja solicitando muito do script de compilação e não o suficiente do servidor de compilação - com team city, você pode facilmente ter scripts simples que realizam cada um de seus marcadores, em qualquer idioma ou pilha que faça sentido e use as tarefas de compilação do TeamCity para encadear as coisas, conforme apropriado.
fonte
Eu recomendo o TeamCity, é fácil de configurar e configurar. O MSBuild é preferível ao NAnt por uma simples razão: todos os arquivos de projeto / solução no vs2008 / 2010 são arquivos MSBuild tecnicamente, mas você pode configurar o TeamCity com o MSBuild ou o NAnt.
Claro, o TeamCity custará você. Eu, pessoalmente, tive uma escolha que preferiria o rake, simplesmente porque o atrito com as ferramentas Ruby comparado a outras, mesmo que o psake também seja um bom candidato.
fonte
Você considerou Hudson ? Pode ser um aborrecimento, pois requer que o servidor de aplicativos Java seja executado, mas acho que poderia permitir que você usasse o script NAnt atual e desenvolvesse isso usando outras ferramentas.
fonte