Sistema de integração contínua para uma base de código Python
-
08-06-2019 - |
Pergunta
Estou começando a trabalhar em um projeto de hobby com um Pitão base de código e gostaria de configurar alguma forma de integração contínua (ou seja,executando uma bateria de casos de teste cada vez que um check-in é feito e enviando e-mails irritantes para as pessoas responsáveis quando os testes falham) semelhante a CruiseControl ou EquipeCidade.
Eu percebo que poderia fazer isso com ganchos na maioria VCSes, mas isso exige que os testes sejam executados na mesma máquina que o servidor de controle de versão, o que não é tão elegante quanto eu gostaria.Alguém tem alguma sugestão para um sistema de integração contínua pequeno, fácil de usar e de código aberto, adequado para um Pitão base de código?
Solução
Nós corremos Buildbot - Trac No trabalho.Não o usei muito porque minha base de código ainda não faz parte do ciclo de lançamento.Mas executamos os testes em diferentes ambientes (OSX/Linux/Win) e ele envia e-mails — e está escrito em Python.
Outras dicas
Uma possibilidade é Hudson.Está escrito em Java, mas há integração com projetos Python:
Eu nunca tentei isso sozinho, no entanto.
(Atualizar, setembro.2011:Após uma disputa de marca registrada, Hudson foi renomeado para Jenkins.)
Segundo a integração Buildbot - Trac.Você pode encontrar mais informações sobre a integração no site Site Buildbot.No meu trabalho anterior, escrevemos e usamos o plugin mencionado (tracbb).O que o plugin faz é reescrever todos os URLs do Buildbot para que você possa usar o Buildbot dentro do Trac.(http://example.com/tracbb).
O que é realmente bom sobre o Buildbot é que a configuração é escrita em Python.Você pode integrar seu próprio código Python diretamente à configuração.Também é muito fácil escrever seus próprios BuildSteps para executar tarefas específicas.
Usamos BuildSteps para obter a fonte do SVN, extrair as dependências, publicar resultados de testes no WebDAV, etc.
Eu escrevi uma interface X10 para que pudéssemos enviar sinais com resultados de construção.Quando a construção falhou, acendemos uma lâmpada de lava vermelha.Quando a construção foi bem-sucedida, uma lâmpada de lava verde foi acesa.Bons tempos :-)
Usamos Buildbot e Hudson para desenvolvimento Jython.Ambos são úteis, mas têm pontos fortes e fracos diferentes.
A configuração do Buildbot é puro Python e bastante simples quando você pega o jeito (veja a documentação da API gerada pelo epydoc para obter as informações mais atuais).O Buildbot facilita a definição de tarefas que não sejam de teste e a distribuição dos testadores.No entanto, ele realmente não tem nenhum conceito de testes individuais, apenas texto, HTML e saída de resumo, então se você quiser ter uma saída de teste navegável em vários níveis e assim por diante, você terá que construí-la você mesmo ou apenas usar o Hudson.
Hudson tem um excelente suporte para detalhar os resultados gerais em conjuntos de testes e testes individuais;também é ótimo para comparar resultados de testes entre compilações, mas o material distribuído (mestre/escravo) é comparativamente mais complicado porque você também precisa de um ambiente Java nos escravos;além disso, Hudson é menos tolerante com links de rede instáveis entre o mestre e os escravos.
Portanto, para obter os benefícios de ambas as ferramentas, executamos uma única instância do Hudson, que detecta as falhas comuns de teste, e depois fazemos a regressão multiplataforma com o Buildbot.
Aqui estão nossos exemplos:
Nós estamos usando Mordido que está integrado ao trac.E é baseado em python.
TeamCity tem algum Python integração.
Mas TeamCity é:
- não é de código aberto
- não é pequeno, mas sim rico em recursos
- é gratuito para equipes pequenas e médias.
Tenho experiências muito boas com Travis-CI para bases de código menores.As principais vantagens são:
- a configuração é feita em menos de meia tela do arquivo de configuração
- você pode fazer sua própria instalação ou apenas usar a versão hospedada gratuitamente
- configuração semiautomática para repositórios github
- nenhuma conta necessária no site;faça login através do github
Algumas limitações:
Python não é suportado como linguagem de primeira classe (no momento da escrita;mas você pode usar pip e apt-get para instalar dependências python;ver este tutorial)
o código deve ser hospedado no github (pelo menos ao usar a versão oficial)