Pergunta

Como o seu punho equipa constrói?
Usamos Cruise Control, mas (devido à falta de conhecimento) que estamos enfrentando alguns problemas - Código congelamento no SVN - gerenciamento de construção
Especificamente, como você disponibilizar uma versão específica quando o código está sendo constantemente check-in?

Geralmente, você pode discutir o que as melhores práticas que você usa no gerenciamento de liberação?

Foi útil?

Solução

Estou surpreendeu positivamente que este não é um duplicado, mas não posso encontrar outro.

Ok, aqui está o negócio. Eles são duas questões separadas, mas relacionadas.

Para a gestão de construção, o ponto essencial é que você deve ter uma compilação automática, repetível que reconstrói toda a coleção de software a partir do zero, e vai até a sua configuração entrega. em outras palavras, você deve construir efetivamente um release candidate cada vez. Muitos projetos realmente não fazer isso, mas eu já vi isso queimar as pessoas (leia "foram queimados por ele") muitas vezes.

A integração contínua diz que este processo de construção deve ser repetido cada vez que há um evento significativo alteração ao código (como um check-in), se possível. Já fiz vários projetos em que isso se transformou em uma construção toda noite porque o código era grande o suficiente para que levou várias horas para construir, mas o ideal é a criação de seu processo de construção de modo que alguns mecanismo automático --- como uma formiga script ou arquivo make --- única reconstrói as peças afetadas por uma mudança.

Você lidar com a questão de fornecer uma versão específica por de alguma forma preservar a configuração exata de todos os artefatos afetados para cada construção, para que possa aplicar o seu processo de criação repetível para a configuração exata que você tinha. (É por isso que é chamado de "gerenciamento de configuração.") As ferramentas usuais de controle de versão, como git ou subversão, fornecer maneiras de identificar e configurações de nome para que eles possam ser recuperados; no SVN, por exemplo, que você pode construir uma marca para uma construção particular. Você só precisa manter um pouco de metadados em torno de modo que você sabe qual a configuração que você usou.

Você pode querer ler um dos livros "Controle Pragmatic Version", e, claro, as coisas no CI e Cruise Control no local de Martin Fowler é essencial.

Outras dicas

integração contínua: melhores práticas , de Martin Fowler

.

Bem, eu consegui encontrar um relacionado com o fio , participei, há um ano. Você pode achar que é útil, também. E aqui está como o fazemos.

[Editado]

Estamos usando Cruise Control como ferramenta de integração. Nós apenas lidar com o tronco, que é o principal repositório Subversion no nosso caso. Nós raramente retirar um novo ramo para fazer cartões nova história, quando há uma chance de conflitos complexos. Normalmente, nós retiramos um ramo para um lançamento de versão e criar a construção daquele e entregar isso para a nossa equipe de teste. Enquanto isso, continuamos o trabalho no tronco e aguardar o feedback de equipe de teste. Uma vez que todos testados criamos uma tag do ramo, que é imutável logicamente no nosso caso. Assim, podemos liberar qualquer versão qualquer momento para qualquer cliente no caso. Em caso de erros no lançamento, não criam tag, fixamos as coisas lá no ramo. Depois de obter tudo fixo e aprovado pela equipe de teste, nós mesclar as alterações de volta ao tronco e criar uma nova tag do ramo específico para essa versão.

Assim, a idéia é nossos ramos e rótulos não são realmente participando de integração contínua, diretamente. Mesclando código ramo de volta ao tronco automaticamente fazer esse código se torna a CI parte (Integração Contínua). Nós normalmente fazer apenas correções de bugs, para a liberação específica, em ramos, por isso realmente não participar no processo de IC, eu acredito. Ao contrário, se começar a fazer novos cartões de história, por algumas razões, em um ramo, então nós não manter esse ramo distante demasiado longo. Tentamos mesclar-lo de volta ao tronco, o mais rapidamente possível.

Precisamente,

  • Criamos ramos manualmente, quando planejamos a próxima versão
  • Criamos uma filial para os erros de lançamento e corrigir nesse ramo em caso
  • Depois de obter tudo de bom, fazemos uma tag a partir desse ramo, que é logicamente imutável
  • Na última vez que mesclar a volta ramo ao tronco se tem algumas correções / modificações

Release Management vai muito além de integração contínua.

No seu caso, você deve usar Cruise Control para fazer automaticamente uma tag, que permite aos desenvolvedores para ir de codificação, enquanto a sua compilação incremental pode ter lugar.

Se a sua construção é incremental, isso significa que você pode desencadear-lo a cada x minutos (e não para todos os cometer, porque se eles forem muito freqüentes, e se a sua construção é muito longo, ele pode não ter tempo para terminar antes do próximo construir tenta tomar lugar). O 'x' deve ser adaptado para ser mais que um ciclo de teste de compilação / unidade.

A integração contínua deve incluir a execução automática de testes de unidade também.

Além disso, um processo de gerenciamento de liberação completa envolverá:

  • Uma série de implantação em servidores de homologação
  • um ciclo completo de (Teste de aceitação do usuário) de homologação / UAT
  • testes não-regressão
  • desempenho / testes de estresse
  • pré-produção (e paralela testes executados)

antes de finalmente lançar em produção.

Again "gerenciamento de liberação" é muito mais complexa do que apenas "integração contínua";)

Para encurtar a história:. Criar um ramo copiado do tronco e checkout / construir a sua libertação naquele ramo no servidor de compilação

No entanto, para chegar a esse ponto de uma forma completamente automatizada usando cc.net não é uma tarefa fácil. Eu poderia entrar em detalhes sobre o nosso processo de construção se você gosta, mas é provavelmente muito grão fino para esta discussão.

Eu concordo com Charlie sobre ter uma compilação automática, repetível a partir do zero. Mas nós não fazemos tudo para a compilação "Contínuo", apenas para noite, Beta, semanal ou Omega (GA / RTM / Gold) compilações. Simplesmente porque algumas coisas, como documentação de geração, pode levar um longo tempo, e para a construção contínua você deseja fornecer desenvolvedor com feedback rápido sobre um resultado de construção.

Eu concordo totalmente com a preservação configuração exata, razão pela qual ramificação uma liberação ou marcação é uma obrigação. Se você tem que manter um lançamento, ou seja, você não pode simplesmente lançar uma outra cópia do tronco, em seguida, uma filial em abordagem de liberação é o caminho a percorrer, mas você vai precisar para se sentir confortável com a fusão.

Você pode usar Team Foundation Server 2008 e Microsoft Studio Team System para realizar seu controle de origem, ramificação e lançamentos.

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