Qual estrutura de integração contínua você usa e por quê? [fechadas]

21

Existem algumas estruturas diferentes de Integração Contínua (CI) por aí e estou me perguntando qual é a mais popular. Quais estruturas você usou nas empresas em que trabalha?

Existe alguma razão para que uma estrutura de IC seja mais popular que outra - talvez isso esteja relacionado aos recursos que ela oferece, às coisas que se integram a ela ou talvez seja apenas um marketing?

Parece que a integração contínua é usada mais nos mundos Java e .net do que em ruby ​​ou python. Por que é isso?

Richard Warburton
fonte
Uma das razões pelas quais o IC não é tão relevante para Ruby e Python é que as linguagens são interpretadas, portanto, não é necessário compilar nada. Mas isso é apenas minha opinião pessoal ...
mliebelt
1
@mliebelt --CI se expande para mais do que apenas compilar verificações. Você pode executar testes de unidade / integração (mesmo com outros projetos dependentes).
Apoorv Khurasia

Respostas:

31

Hudson ou Jenkins (o último é um garfo do primeiro). Razão: É simples (simples de instalar e usar) e possui grande flexibilidade. Os plugins adicionam quase todas as funcionalidades que consigo imaginar.

Alguns anos atrás eu usei o controle de danos . Também era simples de usar, mas não tinha os plugins. Mas o autor decidiu que desistiria da solução simples e iniciou o desenvolvimento de uma nova versão, que consistia em diferentes servidores se comunicando (o que diabos?). Isso não funcionou bem e o projeto foi abandonado. Eu estava na busca há algum tempo, mas nem o controle de cruzeiro (muito complicado) nem o contínuo realmente me pegou. Até Hudson, isso funcionou desde o primeiro momento para mim.

Mnementh
fonte
Vou adicionar uma interface decente a isso também.
Martijn Verburg
Sim, resumiria a interface do usuário em simples de usar.
Mnementh
5
CruiseControl foi uma dor de cabeça para começar ... Hudson foi tão fácil de começar a operar. O plug-in Chuck Norris ( wiki.hudson-ci.org/display/HUDSON/ChuckNorris+Plugin ) é obrigatório.
Sam Dolan
Hudson é realmente ótimo. No entanto, eu gostaria que fosse melhor em isolamento. Se você tem um bom número de equipes diferentes, todas trabalhando em projetos vagamente relacionados, o potencial de pisar nos dedos um do outro é meio alto.
Greg Gauthier
Este programador ainda não pode configurar o Hudson para funcionar no Windows :(
Mchl
16

Eu uso o TeamCity no trabalho e em casa. Ele oferece excelente suporte a vários corredores de compilação e é extensível via plugins.

Não lidar com pilhas de XML para configuração é uma enorme vantagem em meus livros, e a versão gratuita é suficiente para as necessidades da minha casa.

Um problema que tive com o TeamCity tem a ver com a tentativa de fazer a versão automática de assemblies .NET. Eu tive que configurar uma solução alternativa relativamente complicada, mas, uma vez instalada, funcionou como um encanto.

Adam Lear
fonte
Vou tentar o TC em casa. Não tivemos nada além de problemas com o cruisecontrol.net.
Ninguém
8

Pessoalmente, eu só usei CruiseControl e CruiseControl.Net. A razão para isso tem a ver com economia. Eles são razoavelmente estáveis ​​e, uma vez configurados, há muito pouco que você precisa fazer para mantê-lo. A comunidade de usuários geralmente é muito útil e pode ser estendida às suas necessidades.

Dito isso, existem algumas ofertas comerciais disponíveis (uma da JetBrains e outra da Atlassian) que oferecem uma melhor experiência de configuração e suporte comercial. Eu pretendo experimentar essas ofertas, mas ainda não tive uma chance.

As ferramentas de IC têm um papel mais importante a desempenhar com as linguagens compiladas do que as linguagens interpretadas, mas isso não significa que a ferramenta de CI seja desperdiçada em linguagens interpretadas. Quando você tem vários projetos que dependem um do outro e deseja garantir que uma alteração não interrompa acidentalmente suas dependências - as ferramentas de IC são inestimáveis.

Existem três classes gerais de problemas que as ferramentas de IC podem ajudar a detectar:

  1. Erros de compilação - se a assinatura de uma classe mudar de uma maneira que interrompa as dependências, é melhor saber antes das primeiras horas de uma entrega.
  2. Erros de lógica - se o comportamento de uma classe mudar de uma maneira que interrompa as dependências, é melhor saber sobre isso mais cedo. Isso deve ser verificado por algum tipo de teste automatizado, geralmente o teste de unidade.
  3. Teste de aceitação - se você tiver um conjunto automatizado de testes para executar no produto final, é melhor executá-los com frequência.

Os idiomas interpretados não são compilados, portanto, não há erros de compilação a serem capturados. No entanto, os outros dois problemas são comuns o suficiente para que as ferramentas de IC sejam úteis para projetos em Ruby / Python / Perl / etc.

A palavra-chave nos erros de lógica e nos pontos de teste de aceitação é "automatizado". Se você não possui um conjunto de testes que uma máquina pode executar, realmente está perdendo os maiores benefícios das ferramentas de CI. As suítes automatizadas podem ser construídas com o tempo, para que você possa começar pequeno.

Editar

Veja este bom gráfico para comparações de recursos de um grande número de ferramentas de CI (muitas das quais eu não conhecia):

http://confluence.public.thoughtworks.org/display/CC/CI+Feature+Matrix

Berin Loritsch
fonte
A distinção compilada / interpretada não é tão preto e branco. Por exemplo, o Perl tem uma fase de compilação que é executada na inicialização (e pode ser chamada separadamente com a opção "-c") para verificar se há erros de sintaxe.
Andrew Medico
Isso é verdade. Ruby 1.9 e Python também têm fases de compilação. A classe de problema Erro de compilação se aplica a qualquer idioma que o alertará se a classe / variável / método de referência não existir durante a compilação. Definitivamente, aplica-se a qualquer linguagem estaticamente digitada. YMMV em linguagens de tipo dinâmicas mas fortes (como Ruby e Python).
Berin Loritsch
"Depois de configurá-los, realmente há pouco que você precisa fazer para mantê-lo" - isso não é verdade para todos os servidores de integração contínua?
Bryan Oakley
5

Team Foundation Server

CI sólido, forte integração com o Visual Studio e Git como controle de versão . Eu já vi servidores de CI mais flexíveis, como o Hudson, mas a forte integração do TFS com outros produtos torna a experiência tão perfeita que faz sentido para minha equipe.

Ryan Hayes
fonte
Por "outros produtos", você quer dizer "produtos da Microsoft". Não estou criticando você, mas a MS estruturou sua pilha de tecnologias para que, para se integrar aos produtos da MS, você precise de outros produtos da MS, ou de muita paciência e / ou perseverança.
precisa saber é o seguinte
1
Sem sentido nenhum. Eles têm APIs e SDKs para quase tudo o que fazem, até mesmo o Kinect, mas os programadores que não são da Microsoft não sabem, porque cobrem os ouvidos assim que ouvem o Micros .. (link para o TFS SDK) msdn.microsoft.com/ pt-br / library / bb130146 (v = VS.80) .aspx
Luke Puplett
2

Eu uso o CruiseControl.NET e o Hudson . Algumas das minhas compilações estão em uma delas e outras no outro.

Por quê? Porque eu não sou o engenheiro de construção e aquele que é o engenheiro de construção os configura dessa maneira!

Não tenho problemas com a forma como minhas compilações são configuradas ou com reclamações sobre qualquer produto. Estou relatando a você como as coisas estão aqui, com naturalidade e espero que você aprecie essa perspectiva!

ATUALIZAÇÃO: Desde que postei a resposta, Hudson foi bifurcado e se tornou Jenkins . A recomendação acima se aplica à Jenkins.

azheglov
fonte
1

Pulse . Basicamente, Just Works, o que para um engenheiro de construção ocupado é um grande negócio. Eles também têm um excelente suporte técnico. A principal razão pela qual eu amo tanto é que temos mais de 250 projetos e os lida sem problemas; Não posso dizer o mesmo para Hudson.

ebneter
fonte
1

Nossa equipe trabalha principalmente em Python, C ++ e Java. Usamos o Buildbot para IC. Inicialmente, começamos com isso porque ele se integra ao Trac e porque parecia simples e direto. Eu acredito que é a estrutura de CI de escolha no mundo Python.


fonte
1

Hudson. Às vezes, é um pouco complicado, e alguns dos plugins mais interessantes não funcionam, mas com um pouco de pega é bastante útil.

Eu provavelmente usaria o Pulse, mas se você precisar criar em várias plataformas, é> US $ 5k, o que é um pouco demais.

Steve
fonte
1

CruiseControl.NET para integração contínua. Funciona muito bem, embora com o grande número de projetos de compilação que configuramos no CruiseControl, o aplicativo de bandeja da área de trabalho do CCTray seja terrivelmente sem resposta, mesmo com longos intervalos de atualização.

NAnt é para os scripts de construção que são executados nos projetos CruiseControl. Para scripts de construção mais complexos, estendemos o NAnt com tarefas personalizadas de C # NAnt, o que é muito bom - escrever código em C # é muito mais agradável do que criar scripts NAnt.

Somos uma loja da Microsoft e, teoricamente, mudaremos para o Team Build 2010 da Microsoft assim que migrarmos o ambiente do Team Foundation Server para 2010.

brett rogers
fonte
0

Observe que você poderá criar seu aplicativo a partir da linha de comando, independentemente de ter um mecanismo de CI em execução ou não.

Isso significa que tudo o que o mecanismo de CI faz é sistematizar suas chamadas de compilação e você pode escolher o mecanismo que melhor atenda às suas necessidades específicas.

Em geral, gosto de Hudson principalmente porque "parece" legal, mas sei que se tudo falhar, posso mudar para outro sem muito esforço. Nesse caso, eu provavelmente investigaria primeiro o feito pelo Atlassian, pois gosto da "sensação" dos outros programas que eles fazem.

Observe que a intercambiabilidade implica que não importa em que idioma eles estão escritos. Acredito que o Java foi escolhido para muitos mecanismos, porque as muitas plataformas suportadas, combinadas com os muitos blocos de construção facilmente disponíveis. Precisa de um servidor web - pegue um. Precisa de muitos threads simultâneos - basta usá-los. Precisa de extensibiilidade - deixe cair em uma jarra.


fonte
0

Antes de ouvir o termo "integração contínua" (isso foi em 2002 ou 2003), escrevi um script de construção noturno que se conectava ao cvs, peguei uma cópia limpa do projeto principal e dos cinco subprojetos menores, construí todos os jars via ant então construiu e reimplementou um arquivo WAR por meio de um segundo script ant que usava as tarefas ant tomcat.

Ele foi executado via cron às 19:00 e enviou um email com vários arquivos de saída anexados. Nós o usamos durante os 7 meses inteiros do projeto e ele permaneceu em uso pelos próximos 20 meses de manutenção e melhorias.

Funcionou bem, mas ainda prefere hudson a scripts bash, cron e ant.

sal
fonte