Pergunta

Ou, na verdade, estabelecer um processo de construção quando, para começar, não há muito dele.

Atualmente, essa é basicamente a situação que meu grupo enfrenta.Desenvolvemos principalmente aplicativos da web (mas não desenvolvemos desktop no momento).As implantações de software são feias e difíceis de manejar, mesmo com nossos aplicativos modestos, e tivemos muitos problemas surgindo nos dois anos em que faço parte desta equipe (e empresa).Já passou da hora de fazer algo a respeito, e o resultado é que seremos capazes de matar dois pássaros do Joel Test com uma cajadada só (construções diárias e construções de uma etapa, nenhuma das quais existe em qualquer forma).

O que procuro aqui é uma visão geral sobre os tipos de coisas que preciso fazer ou pensar, de pessoas que estão no desenvolvimento de software há mais tempo do que eu e que também têm cérebros maiores.Estou confiante de que a maioria das pessoas postará atualmente na versão beta.

Ferramentas relevantes:Visual Build Source Safe 6.0 (eu sei, mas não posso fazer nada sobre se usamos ou não a fonte segura no momento.Essa pode ser a próxima batalha que travarei.)

Provisoriamente, tenho um projeto Visual Build que faz isso:

  1. Obtenha a fonte e coloque-a no diretório local, incluindo as DLLs necessárias para o projeto.
  2. Obtenha os arquivos de configuração e renomeie conforme necessário (nós os armazenamos em um subdiretório especial que não faz parte do aplicativo real e eles são nomeados de acordo com o uso).
  3. Construir usando Visual Studio
  4. Pré-compile usando linha de comando, copiando para o que será um diretório "build"
  5. Copie para o destino.
  6. Obtenha todos os recursos adicionais necessários - principalmente itens como documentos, imagens e relatórios associados ao projeto (e colocados no diretório a partir da etapa 5).Há muitas dessas coisas e eu não queria incluí-las anteriormente.No entanto, copiarei apenas os itens alterados, então talvez seja irrelevante.Eu não tinha certeza se realmente queria incluir essas coisas nas etapas anteriores.

Ainda preciso fazer logout do Visual Build para tudo isso, mas ainda não estou no ponto em que preciso fazer isso.

Alguém tem algum conselho ou sugestão a dar?No momento, não estamos usando um projeto de implantação, observo.Isso removeria algumas das etapas necessárias nesta compilação, presumo (como a troca de web.config).

Foi útil?

Solução

Ao assumir um projeto que nunca teve um processo de construção automatizado, é mais fácil executá-lo em etapas.Não tente engolir muito de uma vez, caso contrário, pode parecer opressor.

  1. Primeiro, compile seu código em uma única etapa usando um programa de compilação automatizado (ou seja,nant/msbuild).Não vou discutir qual é o melhor.Encontre um que seja confortável para você e use-o.Tenha os scripts de construção ativos com o projeto no controle de origem.
  2. Descubra como você deseja que sua construção automatizada seja acionada.Seja conectando-o ao CruiseControl ou executando uma tarefa noturna de construção usando tarefas agendadas.CruiseControl ou TeamCity são provavelmente a melhor escolha para isso, pois incluem muitas ferramentas que você pode usar para facilitar esta etapa.O CruiseControl é gratuito e o TeamCity é gratuito até certo ponto, onde você pode ter que pagar por ele dependendo do tamanho do projeto.
  3. Ok, neste ponto você estará bastante confortável com as ferramentas.Agora você está pronto para adicionar mais tarefas com base no que deseja fazer para teste, implantação e etc...

Espero que isto ajude.

Outras dicas

Eu tenho um conjunto de scripts Powershell que fazem tudo isso para mim.

Roteiro 1:Build - este é simples, é gerenciado principalmente por uma chamada para msbuild e também cria meus scripts de banco de dados.

Roteiro 2:Pacote - Este utiliza vários argumentos para empacotar uma versão para vários ambientes, como teste, e subconjuntos do ambiente de produção, que consiste em muitas máquinas.

Roteiro 3:Deploy - Isso é executado em cada máquina individual de dentro da pasta criada pelo script Package (o script Deploy é copiado como parte do pacote)

A partir do script de implantação, faço verificações de integridade de coisas como o nome da máquina para que as coisas não sejam implantadas acidentalmente no lugar errado.

Para arquivos web.config, eu uso o

<appSettings file="Local.config">

recurso para ter substituições que já estão nas máquinas de produção e são somente leitura para que não sejam sobrescritas acidentalmente.Os arquivos Local.config não são verificados e não preciso fazer nenhuma troca de arquivos no momento da compilação.

[Editar] O equivalente a appSettings file= para uma seção de configuração é configSource="Local.config"

Trocamos o uso de um script Perl para o MSBuild há dois anos e não olhamos para trás.A construção de soluções do Visual Studio pode ser feita apenas especificando-as no arquivo xml principal.

Para qualquer coisa mais complicada (obter seu código-fonte, executar testes de unidade, construir pacotes de instalação, implantar sites), você pode simplesmente criar uma nova classe em .net derivada de Tarefa que substitui a função Execute e, em seguida, referencie-a no arquivo xml de compilação.

Há uma introdução muito boa aqui:introdução

Trabalhei apenas em alguns projetos .Net (fiz principalmente Java), mas uma coisa que recomendo é usar uma ferramenta como NAnt.Eu tenho um problema real em acoplar minha compilação ao IDE, acaba sendo uma verdadeira dor de cabeça configurar servidores de compilação no futuro, já que você precisa fazer uma instalação completa do VS em qualquer caixa a partir da qual deseja compilar no futuro.

Dito isto, qualquer construção automatizada é melhor do que nenhuma construção automatizada.

Nosso processo de construção é um monte de scripts Perl desenvolvidos internamente que evoluíram ao longo de uma década ou mais, nada sofisticado, mas dá conta do recado.Um script obtém o código-fonte mais recente, outro o constrói e um terceiro o prepara para um local de rede.Desenvolvemos aplicativos de desktop para que nosso processo de preparação também crie pacotes de instalação para teste e, eventualmente, envio aos clientes.

Eu sugiro que você divida em etapas individuais porque haverá momentos em que você desejará reconstruir, mas não será o mais recente, ou talvez apenas precise reorganizar.Nossos scripts também podem lidar com a construção de diferentes ramificações, portanto, considere isso também com qualquer solução que você desenvolver.

Por fim, temos uma máquina de construção dedicada que reconstrói o tronco e as filiais de manutenção todas as noites e envia um e-mail informando qualquer problema ou se foi concluído com sucesso.

Uma coisa que eu sugeriria é garantir que seu script de construção (e projeto de instalação, se relevante no seu caso) esteja no controle de origem.Costumo ter um script muito simples que apenas verifica/obtém o script de construção "principal" mais recente e depois o inicia.

Digo isso porque vejo equipes apenas executando a versão mais recente do script de construção no servidor, mas nunca colocando-o no controle de origem ou, quando o fazem, apenas fazem check-in aleatoriamente.Se você fizer com que o processo de construção "obtenha" o controle de origem, isso o forçará a manter o melhor e mais recente script de construção lá.

Nosso sistema de compilação é um makefile (ou dois).Foi muito divertido fazê-lo funcionar, pois ele precisa ser executado em ambas as janelas (como uma tarefa de construção no VS) e no Linux (como uma tarefa normal de "make bla").O que é realmente divertido é que a compilação obtém a lista de arquivos real de um arquivo .csproj, cria (outro) makefile a partir dele e executa-o.Nos processos, o arquivo make realmente chama a si mesmo.

Se esse pensamento não assusta o leitor, então (ou eles são loucos ou) provavelmente poderão fazer com que make + "seu manipulador de cordas favorito" trabalhe para eles.

Usamos UppercuT.UppercuT usa NAnt para construir e é extremamente fácil de usar.

http://code.google.com/p/uppercut/

Algumas boas explicações aqui: Gancho

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