Estou tentando adicionar a integração contínua a um projeto.
Segundo a Wikipedia , uma parte importante do IC são as compilações automatizadas. No entanto, estou confuso sobre o que, exatamente, isso significa, pois o IC e os artigos de automação de construção parecem discordar.
Pontos específicos de confusão: o que "construção automatizada" significa no contexto de:
- um projeto usando uma linguagem interpretada, como Python ou Perl?
- construindo a partir da fonte na máquina do usuário final?
- um aplicativo que possui dependências que não podem ser simplesmente pré-compiladas e distribuídas, como um banco de dados em um RDBMS local na máquina do usuário?
builds
ebuild
porque não sabia qual usar.Respostas:
Você está certo ao observar que, para algumas tecnologias, uma etapa de compilação não é necessária. No entanto, recomendo que você tenha uma visão mais ampla ao interpretar o termo "automação de construção". Pense em "compilar" como incluindo os dois principais componentes a seguir:
A automação, então, refere-se simplesmente a tornar automática - se não todas - todas essas operações (ou seja, não requer intervenção manual). Isso pode incluir várias etapas, dependendo da sua tecnologia:
Etapas de transformação:
Etapas de garantia de qualidade:
Hoje em dia, boas ferramentas de IC permitem lidar com todas essas preocupações. Inicialmente, a maioria das lojas está interessada em automatizar a compilação de seus códigos, já que essa é a primeira - e mais visível - fonte de problemas no desenvolvimento de software convencional.
fonte
Uma compilação automatizada é uma descrição de um processo que deve cobrir os seguintes princípios básicos:
5.1 Compilação bem-sucedida, sucesso no teste de unidade
É um processo hands-off, que deve ser executado com zero intervenção manual.
fonte
Na minha opinião, uma compilação automatizada é algo que
O objetivo é ter um processo de implantação que possa ser repetido - leia: testado - para que, no momento da implantação na produção, você tenha um certo grau de certeza de que as coisas não vão dar errado. Quanto menos interação humana nos processos de compilação e implantação, mais segura será sua versão.
Se você tiver um idioma não compilado, ainda poderá criar um site e compactá-lo para criar um único artefato.
Uma boa ferramenta de IC permitirá que você escreva muitas tarefas no processo de criação, incluindo a execução de testes de unidade. Ele também manterá registros de suas compilações bem-sucedidas e malsucedidas, cobertura de teste etc. Mas nada disso faz parte do que eu definiria como uma compilação automatizada. (ou seja, um bom processo de criação automatizado possui essas coisas, mas um processo ruim não deixa de ser chamado de "construção automatizada" porque falta essas coisas.)
Sugiro que os testes de integração / regressão sejam executados como parte do processo de implantação, em vez do processo de compilação (embora, se você tiver um ambiente conveniente, possa implantar em cada compilação).
fonte
No caso de linguagens interpretadas, as coisas podem falhar. Algumas linguagens interpenetradas possuem compiladores, mas, na maioria das vezes, provavelmente não há muita necessidade de usá-las. Nesse caso, geralmente apenas procurava o código em busca de erros de sintaxe e análise no lugar da compilação ou passava direto para a execução dos testes no código.
Para mim, isso significa que você pode fornecer um único comando que os usuários finais podem executar para obter a versão mais recente do programa, compilá-lo, configurar e implantar conforme necessário.
Eles se enquadram na parte de teste da integração contínua, pois é possível destruir e reconstruir automaticamente os bancos de dados para garantir que os scripts estejam corretos e que o programa seja testado corretamente.
fonte
O que você está discutindo na sua pergunta são, na verdade, três conceitos diferentes:
A integração contínua em seu núcleo está fazendo pequenas alterações e frequentemente sincronizando essas alterações com a "verdade global". Em vez de fazer um checkout e mantê-lo por uma semana, um desenvolvedor deve trabalhar em tarefas que podem ser concluídas em um dia para que seu código nunca fique muito fora de sincronia com o repositório principal.
Para conseguir isso sem causar problemas à equipe (por exemplo, verificar a fonte que não cria ou quebra a funcionalidade existente). O desenvolvedor deve verificar se seu código não "quebra a compilação". Se feito manualmente, isso adiciona uma sobrecarga adicional ao processo de desenvolvimento (pense em um projeto que leva muito tempo para ser construído e / ou possui muitas interdependências em que uma alteração em uma linha de código pode afetar o aplicativo de maneiras inesperadas).
Para mitigar essa situação, usamos outras técnicas para remover essa sobrecarga.
Usamos compilações automatizadas para efetuar o check-out da fonte e, opcionalmente, executando testes automatizados que verificam se o aplicativo funciona como deveria (essa etapa é tão útil quanto a suíte de testes).
Uma outra etapa de entrega contínua soluciona seu problema com o banco de dados e outras preocupações. A idéia aqui é fornecer algum nível de versão para o banco de dados e outros fatores do ambiente, para que possamos confirmar o mais rápido possível que o aplicativo funciona em um ambiente o mais próximo possível da produção .
fonte
"Compilação automatizada" significa que você pode passar do controle de origem para um pacote expedível com uma ação (agendável) (geralmente um script de shell ou arquivo em lotes).
O que exatamente constitui uma construção, nesse contexto, depende muito do que exatamente você está enviando, como é entregue e quais etapas são necessárias para as várias partes da sua pilha de desenvolvimento, mas, em qualquer caso, você começa com o que está no controle de origem e você acaba com um produto que pode ser entregue (ou uma mensagem de erro e um gerente de projeto irritado).
Para um projeto Python simples, uma compilação automatizada pode consistir em apenas duas etapas - verificar as fontes e copiar arquivos relevantes para os diretórios corretos. Para projetos mais complexos, pode envolver coisas como:
fonte