Integração contínua

menu icon

Integração contínua

Neste guia, saiba mais sobre a integração contínua, uma prática de desenvolvimento de software e DevOps na qual cada desenvolvedor integra seu novo código à ramificação principal do código pelo menos uma vez por dia.

O que é integração contínua?

A integração contínua é um processo de desenvolvimento de software no qual os desenvolvedores integram o novo código que escreveram com mais frequência ao longo do ciclo de desenvolvimento, incluindo-o na base de código pelo menos uma vez por dia. O teste automatizado é feito em cada iteração da compilação para identificar problemas de integração mais cedo, quando eles são mais fáceis de corrigir, o que também ajuda a evitar problemas na mesclagem final para a liberação. No geral, a integração contínua ajuda a simplificar o processo de compilação, resultando em software de qualidade superior e planejamentos de entrega mais previsíveis.

Integração contínua (CI) vs. entrega contínua (CD) vs. implementação contínua

Com integração contínua, cada desenvolvedor integra seu trabalho com a principal ramificação de código fonte pelo menos uma vez por dia (ou, preferencialmente, várias vezes ao dia). Entrega contínua, outra prática do DevOps, em vez disso se concentra em entregar para os usuários qualquer mudança validada para as atualizações da base de código, correções de bugs, até mesmo novos recursos, com a maior rapidez e segurança possível. A implementação contínua simplifica ainda mais o processo, usando testes automatizados para validar mudanças de código base, levando a atualizações mais imediatas.

A entrega contínua começa onde termina a integração contínua, automatizando a entrega de aplicativos para ambientes de infraestrutura selecionados. Ele garante a automação do envio de mudanças de código para diferentes ambientes, como desenvolvimento, teste e produção.

Benefícios

A seguir estão alguns dos benefícios mais notáveis que a integração contínua proporciona:

  • Progresso contínuo e demonstrado para um feedback melhorado
  • Detecção de erros e métricas antecipadas e aprimoradas que permitem a resolução antecipada de erros, às vezes, minutos após o check-in
  • Melhor colaboração da equipe, todos na equipe podem mudar o código, integrar o sistema e determinar rapidamente os conflitos com outras partes do software
  • Melhor integração do sistema, o que reduz surpresas no final do ciclo de vida de desenvolvimento de software
  • Menos mudanças paralelas para fusão e teste
  • Número reduzido de erros durante o teste do sistema
  • Sistemas constantemente atualizados para teste

CI, Agile e DevOps

Agile

Agile é uma prática de desenvolvimento de software que melhora a forma como as equipes de desenvolvimento de software se organizam, se adaptam às mudanças nos requisitos e liberam o software. Como a integração contínua (link externo à IBM) e o desenvolvimento agile (PDF, 153 KB) compartilham muitos dos mesmos recursos (por exemplo, automação de teste), pode ser útil falar sobre integração contínua e agile ao mesmo tempo. O método Agile organiza o desenvolvimento em grupos menores de trabalho ou sprints. Quando aplicadas em DevOps, essas práticas combinadas ajudam a garantir a qualidade do software e a flexibilidade do projeto.

A integração contínua requer que você integre o trabalho com frequência, muitas vezes por dia. Você verifica a integração por uma compilação automatizada que detecta erros de integração o mais cedo possível. A compilação deve incluir testes de execução como parte da verificação. Estender o teste rápido para executar testes de tempo em um ambiente de teste automatizado leva naturalmente à entrega contínua.

O método Agile (link externo à IBM) também é iterativo e se adapta às mudanças para ajustar a escala e evoluir soluções ao longo do tempo. No contexto da integração contínua, o desenvolvimento agile de software trata da entrega de iterações de software com base em como você prioriza o valor dos recursos à medida que integra continuamente.

DevOps

Na estrutura DevOps, a integração contínua fica no início do processo de desenvolvimento de software, onde você verifica seu código pelo menos uma vez por dia para evitar que suas cópias locais fiquem muito longe da ramificação principal da compilação do código. Isso ajuda a evitar conflitos de mesclagem desastrosos que podem "quebrar" a compilação e levar horas ou dias para serem resolvidos pela equipe.

A integração contínua serve como pré-requisito para os estágios de teste, implementação e liberação de entrega contínua. Toda a equipe de desenvolvimento saberá minutos após o check-in se você criou um código incorreto, pois o serviço de integração contínua cria e testa automaticamente as mudanças de código em busca de erros.

Ferramentas de integração contínua de software livre

A seguir estão algumas das ferramentas de integração contínua mais populares:

  • Jenkins: Uma ferramenta de integração contínua de software livre amplamente usada, o Jenkins permite que os desenvolvedores criem, integrem e testem o código automaticamente assim que o submetem ao repositório de fonte, tornando mais fácil para os desenvolvedores detectar bugs antecipadamente e implementar software com mais rapidez. O plug-in do docker está disponível no Jenkins.
  • Buildbot: O buildbot pode automatizar todos os aspectos do ciclo de desenvolvimento de software. Como um sistema de planejamento de tarefas, ele enfileira e executa tarefas e relata resultados.
  • GO: O que faz o Go se destacar entre tantos é o conceito de pipelines, que facilita a modelagem de fluxos de trabalho de compilação complexos.
  • IBM UrbanCode Build
  • Travis CI: Uma das soluções hospedadas mais antigas e mais confiáveis, ela também está disponível em uma versão no local para a empresa.
  • GitLab CI: Parte integrante do projeto Rails de software livre, o GitLab CI é um serviço hospedado gratuitamente que fornece gerenciamento detalhado do repositório git com recursos como controle de acesso, rastreamento de problemas, revisões de código e muito mais.

Conduzir a integração contínua com ferramentas de software livre oferece muitos benefícios, incluindo os seguintes:

  • Centenas de plug-ins que podem dar suporte ao seu projeto
  • Amplo suporte para linguagens de software livre, como Python, Java e JavaScript
  • Sem nenhum custo, oferecendo aos estudantes, start-ups e desenvolvedores que trabalham paralelamente uma ferramenta potente e dentro do orçamento
  • Capacidade de personalização, permitindo que os desenvolvedores usem a base de uma ferramenta de CI e desenvolvam em cima ela para atender às necessidades
  • A capacidade de modificar e redistribuir as ferramentas

As ferramentas de integração contínua de software livre a serem consideradas no fluxo de trabalho de desenvolvimento de software incluem Jenkins, Go, Buildbot e Travis CI, sobre as quais é possível ler na próxima seção.

Caso de uso

O caso de uso hipotético a seguir ilustra como dois desenvolvedores de software podem usar a integração contínua para melhorar seu processo de DevOps.

Os dois desenvolvedores devem se comunicar sobre quais recursos funcionam e como funcionam. Essa pequena equipe precisa de atualizações regulares e deve ser capaz de integrar e testar seu código como um todo. Planejar o check-in e teste de código consome muito tempo de desenvolvimento. É necessário um sistema automático de integração contínua.

Negociar quando essas combinações e testes aconteceriam consumiria muito tempo do desenvolvedor.

Para fazer isso eles teriam que concordar sobre o seguinte:

  1. Quando começar a testar a integração de código
  2. Como testar se a integração foi bem-sucedida
  3. Como comunicar os resultados para a equipe

As plataformas de integração contínua possuem respostas padrão para essas perguntas e a maioria permite configuração e instalação.

Geralmente, plataformas de CI como a Jenkins iniciam testes de integração no check-in. Quando o novo código é verificado, o sistema de CI executa um conjunto de testes, que pode incluir testes de unidade e testes de regressão, e então determina se o código foi integrado com sucesso.

Ou, se você estiver usando uma linguagem compilada, o teste padrão será se o código foi compilado com sucesso. Se não, então o novo código interrompeu a compilação. Para linguagens como Python ou JavaScript, deve-se criar seu próprio teste de integração.

De qualquer forma, a maioria dos sistemas de CI registra as tentativas de integração, a taxa de sucesso e outras métricas.

Servidores

Um servidor de integração contínua é uma ferramenta de software que centraliza todas as suas operações de integração contínua e fornece uma plataforma confiável e estável para desenvolver de projetos. É possível configurar e ajustar servidores de CI para desenvolver vários projetos para diferentes plataformas. Um servidor de integração contínua modela e visualiza facilmente fluxos de trabalho complexos (permitindo a entrega contínua) e fornece uma interface intuitiva para o desenvolvimento de pipelines de entrega contínua. Um servidor de integração contínua oferece a capacidade de fazer o seguinte:

  • Executar compilações, testes e liberações automáticos em um único lugar
  • Implementar qualquer versão, a qualquer hora
  • Manter a configuração ordenada
  • Oferecer suporte a plug-ins para aprimorar a funcionalidade
  • Monitorar o repositório do seu projeto
  • Extrair mudanças e executar tarefas definidas para confirmação bem-sucedida
  • Enviar feedback para membros do projeto relevantes com detalhes da compilação.

A importância dos testes

Teste contínuo começa quando você produz uma compilação de integração contínua e um pacote (também conhecido como uma entidade instalável ou entidade empacotada). Ele para quando essa entidade empacotada entra em produção. Cada passo de ponta a ponta envolve um conjunto de testes.

No mínimo, quando você tem apenas um estágio de teste, 30% da integração contínua envolve testes. Na realidade, as atividades de integração contínua são compostas de 50 a 70 de testes. Costumava ser necessário concluir o teste manualmente. Agora é possível usar testes automatizados, a chave para uma integração contínua bem-sucedida.

Como parte da automação de testes para integração contínua, o desenvolvimento orientado a testes desenvolve iterativamente o código e testa um caso de uso por vez para garantir a cobertura do teste, melhorar a qualidade do código e definir as bases para a entrega contínua. O teste automatizado informa se o novo código falhou em um ou mais dos testes desenvolvidos em todas as áreas funcionais do aplicativo. Uma melhor prática requer que os desenvolvedores executem todos ou um subconjunto de testes em seus ambientes locais, o que garante que os desenvolvedores só confirmem o código-fonte para o controle de versão depois que as novas mudanças de código passarem nos testes. A experiência mostra que o teste de regressão eficaz pode ajudar a evitar surpresas indesejáveis no futuro.

Pipeline de integração contínua

Um pipeline de integração contínua automatiza os estágios do pipeline de um projeto tais como compilações, testes e implementações, de maneira repetível, com mínima intervenção humana. Um pipeline de integração contínua automatizado é essencial para agilizar o desenvolvimento, teste e implementação de seus aplicativos, permitindo controles, pontos de verificação e velocidade.

Melhores práticas

O processo de integração contínua é um componente crítico do DevOps, que ajuda a unificar suas equipes de desenvolvimento e operações em um repositório compartilhado para codificação, teste, implementação e suporte de software. A seguir estão algumas melhores práticas de CI que podem ajudar você a ter sucesso:

  • Manter um único repositório de código-fonte:use o gerenciamento de controle de versão para rastrear e controlar todos os arquivos para compilar um produto. Esta base de código consolidada torna a distribuição e a visibilidade mais fácil.
  • Automatizar a compilação:isso envolve compilar, vincular e outros processos que produzem os artefatos de compilação. O autoteste também deve ser automatizado.
  • Usar confirmações diárias da linha principal: força os desenvolvedores a enviar suas mudanças para o fluxo de desenvolvimento principal pelo menos uma vez por dia. Cada desenvolvedor deve verificar se sua cópia de trabalho é consistente com o fluxo de desenvolvimento principal.
  • Testar em um clone do ambiente de produção: faça o ambiente de teste o mais similar possível ao seu ambiente de produção final.
  • Automatizar a implementação: implemente diversos ambientes (desenvolvimento, integração, produção) para executar compilações e testes.

Integração contínua e IBM Cloud®

A abordagem da IBM consiste em definir e automatizar projetos e configurar a segurança usando modelos. Quando uma alteração é feita em uma biblioteca, os aplicativos dependentes são recompilados e conectados, vinculados ou ligados novamente. Entender as dependências do aplicativo irá ajudar você a modernizar seus aplicativos.

À medida que as organizações aceleram tal transformação digital, a necessidade de automação se amplia nas operações de negócios e de TI. Uma mudança em direção a uma maior automação deve começar com projetos pequenos e mensuráveis de sucesso, que você pode ajustar a escala e otimizar para outros processos e em outras partes da sua organização.

Trabalhando com a IBM, você terá acesso a Recursos de automação impulsionados por IA, incluindo fluxos de trabalho pré-desenvolvidos, para ajudar a acelerar a inovação, tornando cada processo mais inteligente.

Dê o próximo passo:

Inicie o gerenciamento de suas construções de software, incluindo ajuste de escala e configuração, com ajuda de IBM® UrbanCode® Build.

Saiba mais sobre os cinco "itens essenciais" para o sucesso da automação (link externo à IBM) neste relatório da HFS Research.

Comece a usar hoje com uma conta da IBM Cloud.