Pergunta

Eu estou tentando automatizar o processo de compilação de grupo de engenharia. Como parte desse automação, eu estou tentando chegar a um ponto onde o ato de aplicar uma etiqueta específica que adere a um padrão terá início um processo automatizado que irá fazer o seguinte:

  • Confira código-fonte
  • Criar um script de construção de um modelo
  • Crie o projeto

Estou bastante certo de que eu poderia fazer isso com um post-hook no Subversion, mas eu estou tentando descobrir uma maneira de fazer isso com algo diferente de um gancho de subversão.

  • Será que faz sentido para monitorar o diretório tags no repositório Subversion para lançar meu trabalho?
  • Existem algumas ferramentas decentes que ajuda com isso (.NET seria ótimo se possível).
  • Am I melhor apenas escrever um motor para fazer isso?

As minhas preferências:

  • produto existente que faz todo ou parte do presente
  • Se o trabalho de desenvolvimento precisa ocorrer, .NET é preferível
  • Funciona com Windows (temos um repo baseado em Linux, mas constrói tudo ocorre no Windows)
Foi útil?

Solução

Gosto hudson - fácil de configurar e funciona fora da caixa com SVN.

Você pode configurá-lo para construir em cada commit.

Eu transferi-lo e começou a construir com ele dentro de um dia. Ele passou por uma série de ajustes, mas eu recomendaria a ninguém.

Eu usei também o controle de cruzeiro, mas não estou tão feliz com isso. Eu não tenho nenhum distintos da emissão de plataforma cruzada razões específicas.

Editar

Eu recentemente adicionou um trabalho no meu servidor de compilação hudson que escuta para um google / gmail jabber chat. Eu posso "promover" uma compilação "regular" para uma versão de compilação com este mecanismo. Eu apenas configurar um novo emprego que faz as medidas necessárias para promover / publicar uma construção privada em um release candidate.

Outras dicas

Eu fiz isso usando Hudson. Na abertura regular subversão check-out eu ter um check-out para o tronco:

http://dryad.googlecode.com/svn/trunk/dryad

Em seguida, como a primeira ação de compilação, eu tenho um "executar shell" e em que o uso de shell um switch svn à mudança para a última tag no repositório:

svn mudar http://dryad.googlecode.com/svn/tags/ ' svn ls http://dryad.googlecode.com/svn/tags | tail -n 1' dryad

O próximo passo de compilação é um maven 'instalação limpa' comando que inicia a construção utilizando o código da versão marcado.

Eu ainda não descobri ainda como obter Hudson para começar com uma versão mais recente marcado, em vez de ter que fazer o interruptor, mas a chave funciona. Você pode então ter o gatilho ser quando o diretório tag é atualizado.

É automatizado ... um pouco de um truque, mas funciona ...

o interruptor deve incluir uma crase para o segundo comando svn, mas teve de uso ", porque a crase não apareceu aqui.

Parece que você está depois de um mecanismo de compilação de integração contínua algo como CruiseControl ou Hudson (Hudson escrito em java, mas é muito fácil de usar no Windows).

Agora você pode falsificar seus scripts de construção para essas ferramentas para assistir ao diretório tags, mas que seria um pouco contra a corrente como eles estão destinados a assistir a um local específico e construir o projeto no local. Se você assistir a todo o diretório tags, você poderia facilmente acabar com todas as tags iria ser verificado na máquina de compilação e você precisa de um script de nível superior para decidir qual tag para construir.

Por que você quer, um mecanismo de compilação pode assistir a um local específico (por exemplo '/ ramos / release'). Se você, em seguida, se fundem em que ramo, Hudson vai construir automaticamente o projeto, arquivar os artefatos e criar uma tag para você se foi tudo bem sucedido (ver a Subversion Tagging Plugin).

Eu não gosto de fazer esse tipo de coisa a partir de um gancho post-commit, porque torna o take fases muito longo. No entanto, TeamCity é um sistema de controle de origem que tem uma característica que faz exatamente isso sem te segurar-se, enquanto se compromete.

Eu recomendo Hudson para isso.

CruiseControl.Net pode facilmente automatizar automática constrói a partir de repositórios Subversion.

Pode monitorar o repositório SVN (e vários outros tipos) e começar automática constrói usando uma variedade de ferramentas. (NAnt, MSBuild, etc.)

Um produto comercial foi anunciado neste site exatamente para este fim!

http://www.finalbuilder.com/Default.aspx?tabid=314

Você pode precisar adicionar uma pós-gancho para SVN para desencadear o início de construção a menos que você quer que ele seja executado um calendário.

Eu também recomendo Hudson para isso. Eu estava olhando para fazer algo semelhante, criar uma marca e ter que lançar uma compilação. Em vez disso eu optou por usar este plugin para hudson:

http://wiki.hudson-ci.org/display/HUDSON/ Lançamento + Plugin

E usar isso para impulsionar a criação da marca e uma compilação de lançamento explícito.

Eu estou usando NAnt (e NAntContrib ) para compilações automatizadas. Ele verifica automaticamente um repositório Subversion para mudanças e (se houver) recebe a versão mais recente do código fonte e começa a compilação.

Eu não tenho certeza se as tarefas existentes permitem fazer exatamente o que você quer, mas talvez você possa usá-lo como ponto de partida e, se necessário, estendê-lo com tarefas para suas necessidades especiais (É desenvolvido com .NET).

Como os outros caras disseram, você quer um servidor de integração contínua (CruiseControl, CruiseControl.Net, Hudson, etc). Enquanto você pode trabalhar em seu script de construção e comprometer ganchos para fazer a funcionalidade que você descreveu, no final, você vai achar que você re-inventou a roda (Integration Server contínua). Não há necessidade de, existem soluções disponíveis gratuitamente apenas para este fim.

O processo vai trabalhar um pouco diferente do que você descrito acima. O servidor de compilação irá:

  1. detectar um novo commit
  2. Checkout seu código-fonte
  3. Execute o script de construção
  4. Tag na compilação bem-sucedida

O comprometer desencadeia o processo e cria a tag ao invés do tag desencadear o processo. O servidor faz isso minha monitorar o repositório SVN, em vez de um gancho de cometer.

Confira de CruiseControl.Net documentação sobre este assunto, especificamente as opções tagOnSuccess e tagBaseUrl. Hudson e CruiseControl deve ter opções semelhantes.

http://confluence.public.thoughtworks.org / display / CCNET / Subversion + Fonte + Control + Bloco

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