Pergunta

Parece que existem tantas maneiras diferentes de automatizar a construção/implantação que fica difícil analisar todos os diferentes cenários que as pessoas suportam em tutoriais na web.Então, eu queria apresentar a questão para a galera do stackoverflow...qual seria a melhor maneira de configurar um sistema automatizado de construção e implantação usando a seguinte configuração:

  • Estúdio Visual 2008
  • Projeto de aplicação web
  • CruiseControl.NET

Uma das primeiras coisas que tentei foi fazer com que o CCnet compactasse automaticamente a saída e a copiasse para o servidor, mas isso exigia trabalho manual para descompactar no destino.No entanto, se tentarmos copiar todos os arquivos individualmente, isso poderá levar muito tempo se for um aplicativo grande (o servidor de compilação fica fora do datacenter em nosso escritório...Eu sei).

Também é de particular interesse como daríamos suporte a vários ambientes, já que temos dev, qa, uat e, claro, prod.

MSDeploy parece muito interessante, mas a menos que eu esteja interpretando a literatura incorretamente, não ajuda no cenário de implantação a partir da saída de um servidor de construção.Na verdade, parece que será útil na implantação de uma construção em um farm de construção ...mas mesmo para implantar de um ambiente para outro, seria necessário alterar manualmente as configurações e URLs de serviços da web, etc.

Foi útil?

Solução

Recentemente, passei alguns dias trabalhando na automação de implantações em minha empresa.

Usamos uma combinação de CruiseControl, NAnt, MSBuild para gerar uma versão de lançamento do aplicativo.Em seguida, um script separado usa MSDeploy e XCopy para fazer backup do site ativo e transferir os novos arquivos.

Nossa solução é brevemente descrita em uma resposta a esta pergunta Automatizar a implantação de aplicativos da Web?

Outras dicas

Você pode estar interessado em MSDeploy. Aqui está uma postagem de Scott Hanselman sobre isso.No momento, ele está disponível apenas como uma prévia técnica (setembro de 2008), mas vale a pena avaliá-lo de acordo com seus requisitos.

Há outra nova ferramenta de construção (um wrapper muito inteligente) chamada NUBuild.É leve, de código aberto e extremamente fácil de configurar e oferece manutenção quase sem toque.Eu realmente gosto desta nova ferramenta e nós a tornamos uma ferramenta padrão para nosso processo contínuo de construção e integração de nossos projetos (temos cerca de 400 projetos em 75 desenvolvedores).Experimente.

http://nubuild.codeplex.com/

  • Interface de linha de comando fácil de usar
  • Capacidade de atingir toda a versão .NET Framework IE1,1, 2,0, 3,0 e 3,5
  • Suporta configuração baseada em XML
  • Suporta referências de projeto e arquivo
  • Gera automaticamente a “lista de compilação encomendada completa” para um determinado projeto - sem manutenção de toque.
  • Capacidade de detectar e exibir dependências circulares
  • Executar compilação paralela - decide automaticamente qual dos projetos na lista de compilação gerada pode ser construída de forma independente.
  • Capacidade de lidar com assemblies proxy
  • Fornece pista visual para o processo de construção, por exemplomostrando "% concluído", "status atual" etc.
  • Gera registro de execução detalhado tanto em xml quanto em formato de texto
  • Facilmente integrado ao sistema de integração contínuo de Cruise-Control.net
  • Pode usar o Logger personalizado como o XMLLOGger ao segmentar a versão 2.0 +
  • Capacidade de analisar logs de erros
  • Capacidade de implantar assemblies construídos no local especificado pelo usuário
  • Capacidade de sincronizar o código-fonte com o sistema de controle de fonte
  • Capacidade de gerenciamento de versão

Você tem a capacidade de executar comandos remotamente?O PsExec utilitário de Sistemas internos permitiria executar um programa de descompactação de linha de comando na máquina remota.Se você tiver um script que copie a compilação como um arquivo .zip para o site remoto, precisará apenas de mais uma linha para a chamada PsExec descompactar os arquivos.

eu tive um pergunta relacionada sobre como obter um conjunto implantável de arquivos de uma compilação automatizada.Descobri que os projetos de implantação da Web (links e tudo na pergunta antiga) faziam o que eu precisava - eles são um complemento do VS e do MSBuild.

Este é um problema comum (e eu gostaria de ter lido isso antes) para todo o desenvolvimento, não apenas para o ASP.NET.Sendo um de seus desenvolvedores, minha equipe naturalmente usa Construir Mestre internamente para todo o processo de lançamento e, para a maioria dos cenários, é gratuito.Dentro da ferramenta, podemos executar todas as compilações de CI padrão para criar artefatos e, em seguida, configurar um processo de automação para implantar esses artefatos em qualquer um dos mais de 40 servidores que temos hospedados interna ou externamente, dependendo do aplicativo ou ambiente específico. .

Como você mencionou especificamente a implantação em diferentes ambientes de teste, este é um aspecto fundamental da ferramenta.A ideia é modelar o fluxo de trabalho do ambiente (por exemplo,Integração -> Controle de qualidade -> Produção) que você já possui e essencialmente promove uma construção desde o controle de origem até a produção.Na maioria das vezes, é tão simples quanto adicionar uma ação de implantação que implanta um artefato no ambiente; outras vezes, pode ser muito mais complexo.

Você também mencionou casualmente que as alterações no arquivo de configuração fazem parte da implantação, que é outro componente integrado ao BuildMaster.A ideia que tivemos foi usar a própria ferramenta como hub central para todos os arquivos de configuração e implantações, garantindo assim que as alterações mais recentes sejam aplicadas automaticamente com uma simples ação "implantar arquivos de configuração" em seu plano de implantação.

Uma coisa que você não mencionou em relação a esse processo é o aspecto de implantação do banco de dados.A maioria dos aplicativos ASP.NET requer um banco de dados associado; caso contrário, poderiam ser apenas arquivos HTML estáticos.É crucial que o esquema do banco de dados seja atualizado para a versão apropriada do banco de dados a cada implantação.Não é de surpreender que exista um módulo no BuildMaster que também cuida disso para você.A ideia é armazenar scripts DDL-DML dentro da própria ferramenta, e executando scripts apenas uma vez por ambiente, ele garante que todos os seus bancos de dados em cada ambiente estejam atualizados à medida que suas compilações são implantadas por meio deles.Outros scripts (por ex.procedimentos armazenados, visualizações, gatilhos, etc.) são essencialmente arquivos de código e, portanto, pertencem ao controle de origem.Esses scripts do tipo DROP-CREATE-CONFIGURE podem ser executados sempre, na maioria dos casos, com uma simples ação de implantação.

Outra peça do quebra-cabeça de implantação que a maioria dos desenvolvedores não pensa é a automação de processos.Muitos desenvolvedores precisam realizar aprovações ou preencher formulários de solicitação de alteração para executar esses processos manualmente.Novamente, tudo isso está disponível como parte da configuração automatizada do fluxo de trabalho no BuildMaster.Você pode configurar bloqueadores que não permitem a promoção para o ambiente de controle de qualidade, a menos que todos os testes de unidade tenham passado, ou bloquear a promoção para o ambiente de teste, a menos que alguém da equipe de controle de qualidade aprove a construção e todos os problemas em sua ferramenta de rastreamento de problemas sejam resolvidos/fechados para esse lançamento específico.

Embora eu perceba que deixei o CC.NET de fora da resposta, nossos aplicativos são todos construídos e implantados por meio do BuildMaster, portanto, não precisamos mais dele, embora possamos facilmente coletar os artefatos de um local de armazenamento e implantá-los em ambientes posteriores.

Vejo que muitas pessoas usam CC para seus projetos .NET, mas por que não usar Jenkins, Sonarqube?Eles têm tudo que você precisa.Eu configurei tudo isso em 3 dias.Tenho um servidor Win 2008 R2, MSSQL, Jenkins, VIsual SVN e Sonarqube.

Tudo funciona muito bem e você obtém todas as métricas do seu projeto.Sonarqube usa Gallio, Gendarme, FXcop, Stylecop, NDepths e PartCover para obter suas métricas e tudo isso é bastante simples, já que SonarQube faz isso automaticamente, sem muita configuração.

eu posto algumas fotos para você também ter uma ideia disso.Aqui está o Jenkins que constrói e obtém métricas do Sonar e outro trabalho para implantação automática no IIS

E Sonarqube, todas as métricas do meu projeto.Este é um aplicativo MVC4 simples, mas funciona muito bem!:

Se você quiser mais informações, posso ser mais específico, mas acho que você deveria pelo menos considerar Jenkins.Se o CC combina melhor com você, pelo menos você procurou uma boa alternativa antes de escolher.

Toda essa configuração usa MSBuild para criar e implantar os aplicativos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top