Eu nunca usei um sistema de integração contínua (IC) antes. Eu codifico principalmente em MATLAB, Python ou PHP. Nenhum deles possui uma etapa de criação e não vejo como um IC pode ser usado para o meu trabalho. Um amigo de um grande projeto de uma grande empresa me disse que o idioma não importa.
Não vejo como o IC seria útil para mim se eu não tiver uma etapa de construção. Eu posso pensar no CI como um ambiente de teste que executaria testes de unidade. Estou esquecendo de algo?
Respostas:
Integração contínua como termo refere-se a duas idéias distintas.
O primeiro é um fluxo de trabalho: em vez de todos em uma equipe trabalharem em seu próprio ramo e, depois de algumas semanas de programação, tentar mesclar suas mudanças na linha principal, essas mudanças são integradas (quase) continuamente. Isso permite que os problemas apareçam mais cedo e evita alterações incompatíveis. No entanto, isso exige que possamos verificar facilmente se uma alteração "funciona".
É aí que entra a segunda idéia, que se tornou muito mais popular. Um servidor de IC é um ambiente limpo, onde as alterações são testadas o mais rápido possível. O ambiente limpo é necessário para que a construção seja reproduzível. Se funcionar uma vez, deve sempre funcionar. Isso evita problemas "mas funcionou na minha máquina". Em particular, um servidor de IC é valioso quando o software é executado em sistemas diferentes ou em configurações diferentes e você precisa garantir que tudo funcione.
A falta de uma etapa de construção é irrelevante. No entanto, o IC só faz sentido se você tiver um conjunto de testes. Este conjunto de testes deve ser automático e não deve ter falhas. Se os testes falharem, o desenvolvedor apropriado deve receber uma notificação para que possa corrigir o problema que apresentou ("interromper a compilação", mesmo quando não houver compilação como compilação).
Acontece que esse servidor é valioso para mais do que apenas testar. De fato, a maioria dos softwares de CI é realmente ruim para executar testes em várias configurações, mas boa para gerenciar todos os tipos de tarefas. Por exemplo, além dos testes de unidade "contínuos", pode haver um teste completo como uma construção noturna. O software pode ser testado com várias versões do Python, diferentes versões da biblioteca. Um site pode ser testado para links mortos. Podemos executar análises estáticas, verificadores de estilo, ferramentas de cobertura de testes etc. sobre o código. Documentação pode ser gerada. Quando todos os conjuntos de testes forem aprovados, o processo de empacotamento poderá ser iniciado para que você esteja pronto para lançar seu software. Isso é útil em uma configuração ágil, na qual você deseja um produto implantável (e demonstrável) o tempo todo. Com o surgimento de aplicativos da web, há também a ideia de implantação contínua: Se todos os testes forem aprovados, podemos enviar automaticamente as alterações para a produção. Obviamente, isso exige que você esteja realmente confiante em sua suíte de testes (caso contrário, você terá problemas maiores).
fonte
É verdade que você não tem necessidade específica de um sistema de IC para executar compilações e verificar se essas compilações estão corretas, mas isso é apenas parte do que trata o IC.
O objetivo do IC é detectar erros o mais rápido possível, porque, de um modo geral, quanto mais cedo um erro for detectado, mais barato será o reparo. Para esse fim, no caso de uma etapa de construção não ser necessária, um sistema de IC ainda pode automatizar o uso de ferramentas de análise de código, implantação em um ambiente de teste, unidade / integração / regressão / outros testes que você pode automatizar e outras etapas você pode executar automaticamente para verificar se há erros.
fonte
A integração contínua executa mais do que uma compilação do código. Se isso foi tudo o que fizemos, não precisaríamos de tantas ferramentas!
Algumas outras tarefas que posso pensar de imediato que um pipeline de integração contínua geralmente executa:
Indo um pouco mais além da linha de fronteira da "integração contínua" em sentido estrito, você também pode fazer o seguinte:
O ponto é simplesmente este: existem tarefas que você deve executar periodicamente no processo de desenvolvimento de software, além de apenas escrever o código. Ao automatizar essas tarefas e executá-las em um servidor, você obtém
E provavelmente alguns outros benefícios que nem sequer vêm à mente.
fonte
Pode não ser necessário compilar as soluções, mas o IC ainda pode ajudá-lo, alterando os caminhos dos arquivos / pastas de configuração, etc.
Digamos que você implemente seu código Python em 5 servidores de controle de qualidade diferentes e precise apontá-lo para bancos de dados de controle de qualidade diferentes e, depois que o teste automatizado for executado (acionado pelo CI), promovendo a construção para produção e implantando-o com alterações de configuração apropriadas para cada servidor de produção .
fonte