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.
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.
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.
Os benefícios comumente citados da integração contínua incluem:
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.
As ferramentas de software livre mais conhecidas para a integração contínua são:
A integração contínua com ferramentas de software livre oferece muitos benefícios, incluindo os seguintes:
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.
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:
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:
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.
A importância dos testes
Oteste 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:
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.
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.
A entrega contínua automatiza a entrega de aplicativos para ambientes de teste e produção.
Um guia prático para o pipeline de integração contínua/entrega contínua (CI/CD).