O que é integração contínua?
A integração contínua é um processo de desenvolvimento de software no qual os desenvolvedores integram um novo código na base de códigos pelo menos uma vez por dia.
Plano de fundo azul e preto
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 construçã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 e DevOps

Por definição, o DevOps descreve um processo de desenvolvimento  de software e uma mudança de cultura organizacional que acelera a entrega de software de alta qualidade , automatizando e integrando os esforços das equipes de desenvolvimento e operações de TI , dois grupos que tradicionalmente exerciam suas tarefas separadamente ou em silos.

Na prática, os melhores processos e culturas de DevOps se estendem além do desenvolvimento e das operações para incorporar entradas de todos os stakeholders do aplicativo, incluindo a engenharia de plataforma e infraestrutura, segurança, conformidade, governança, gestão de riscos, linha de negócios, usuários finais e clientes, no ciclo de vida do desenvolvimento do software. 

No DevOps framework, a integração contínua ocorre no início do processo de desenvolvimento de software e nesta etapa 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 construçã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 as etapas de teste, implementação e liberação da 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.

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

A entrega contínua e a implementação contínua seguem a integração contínua no ciclo do DevOps. 

A entrega contínua  (CD) começa onde termina a integração contínua, automatizando a entrega de aplicativos para ambientes de infraestrutura selecionados. A CD foca em  fornecer quaisquer alterações validadas à base do código, atualizações, correções de bugs e, até mesmo, novo recursos, aos usuários da forma mais rápida e segura possível. Ela assegura que a automação envie as mudanças de código para diferentes ambientes, como desenvolvimento, teste e produção.

Na implementação contínua, as alterações na código de um aplicativo são liberadas automaticamente no ambiente de produção. Esta automação é orientada por uma série de testes predefinidos. Depois que as novas atualizações passam nesses testes, o sistema envia as atualizações diretamente para os usuários do software.

Benefícios da integração contínua

Os benefícios comumente citados da integração contínua incluem:

  • 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

  • Progresso contínuo e demonstrado para um feedback melhor

  • Melhor colaboração da equipe: todos na equipe podem alterar 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 mesclagem e teste

  • Número reduzido de erros durante o teste do sistema

  • Sistemas constantemente atualizados para teste
Integração contínua e Agile

Agile é uma prática de desenvolvimento de software que melhora a forma como as equipes 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 ágil  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 ao 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. A ampliação do escopo do teste rápido para executar testes de tempo em um ambiente de teste automatizado leva, naturalmente, à entrega contínua.

O Agile (link externo à IBM)  também é iterativo e se adapta às mudanças para escalar e desenvolver 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 realiza integrações continuamente.

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

As ferramentas de software livre mais conhecidas para a integração contínua são:

  • 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 Go se destaca entre tantos pelo conceito de pipelines, que facilita a modelagem de fluxos de trabalho de compilação complexos.

  • Travis CI: uma das soluções hospedadas mais antigas e mais confiáveis, ela também está disponível em uma versão local para empresas.

  • GitLab CI: parte integrante do projeto Rails de software livre, o GitLab CI é um serviço hospedado sem custo 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.

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, que serão apresentadas na próxima seção.

Testes de integração contínua

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 o desenvolvimento 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 permite:

  • 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

  • Suporte a plug-ins para aprimorar a funcionalidade

  • Monitorar o repositório do seu projeto

  • Realizar mudanças e executar tarefas definidas para confirmação bem-sucedida

  • Enviar feedback para membros relevantes do projeto com detalhes da compilação.
Um caso de uso de integração contínua

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 comunicar 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 ter um sistema automático de integração contínua.

Negociar quando essas combinações e testes aconteceriam consumiria muito tempo do desenvolvedor. Eles teriam que concordar nos seguintes pontos:

  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 registro inicial. 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.

Testes e melhores práticas

A importância dos testes

O

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 as etapas do pipeline de um projeto, como compilações, testes e  implementações, de maneira repetida, 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.

Práticas recomendadas de integração contínua

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 práticas recomendadas de CI que podem ajudar você a ter sucesso:

  • Manter um único repositório de código-fonte: use o gerenciamento de controle de origem para rastrear e controlar todos os arquivos para criar um produto. Esta base de código consolidada torna a distribuição e a visibilidade mais fácil.

  • Automatizar a construção: isso envolve compilar, vincular e outros processos que produzem os artefatos de construçã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 construções e testes.
Soluções relacionadas
IBM UrbanCode Build

Simplifique a configuração e a execução de construções de software com a ferramenta IBM UrbanCode Build, uma solução de gerenciamento de construções de escala empresarial que usa um sistema orientado por modelos.

Conheça o IBM UrbanCode Build
Recursos O que é DevOps?

O DevOps acelera a entrega de software de qualidade superior combinando e automatizando o trabalho de desenvolvimento de software e equipes de operações de TI.

O que é a entrega contínua?

A entrega contínua automatiza a entrega de aplicativos para ambientes de teste e produção.

O que é CI/CD e pipeline de CI/CD?

Um guia prático para o pipeline de integração contínua/entrega contínua (CI/CD).

Dê o próximo passo

Você está pronto para o DevOps? A entrega de software e serviços na velocidade exigida pelo mercado requer que as equipes iterem e experimentem rapidamente, além de implementar novas versões com frequência, impulsionadas por feedback e dados. Para aumentar sua produtividade, as equipes de desenvolvimento na cloud de maior sucesso adotam a cultura e as práticas modernas de DevSecOps, adotam arquiteturas nativas da cloud e montam cadeias de ferramentas com as melhores ferramentas da categoria.

Encontre sua solução DevOps