Close

Integração contínua

Construa a agilidade da sua equipe com feedback mais rápido. Porque você só se move tão rápido quanto seus testes.


Integração contínua (CI) é uma prática de automatizar a integração de alterações de código de vários contribuidores em um único projeto de software. É uma prática recomendada primária de DevOps, permitindo que os desenvolvedores mesclem com frequência as alterações de código em um repositório central onde builds e testes são executados. Ferramentas automatizadas são usadas para afirmar a correção do novo código antes da integração.

Um sistema de controle de versão de código-fonte é o ponto crucial do processo de integração contínua. O sistema de controle de versão também é complementado com outras verificações, como testes de qualidade de código automatizados, ferramentas de análise do estilo da sintaxe e muito mais.

Como chegar na integração contínua

Saiba como adotar a integração contínua e testes automatizados em cinco etapas. Leia o artigo

Cinco dicas para repositórios Git de fácil utilização com CI

Cinco dicas para aproveitar ao máximo o Git e sua ferramenta de integração contínua! Leia o artigo

Ferramentas de integração contínua

Cinco dicas para aproveitar ao máximo o Git e sua ferramenta de integração contínua! Leia o artigo

Desenvolvimento baseado em tronco

Saiba mais sobre o desenvolvimento baseado em troncos, prática de gerenciamento de controle de versão na qual os desenvolvedores fazem o merge de atualizações pequenas e frequentes para o tronco ou ramificação principal. Leia o artigo


A importância da integração contínua

A fim de compreender a importância da integração contínua, é útil discutir algumas questões problemáticas que surgem com frequência pela falta dela. Sem a integração contínua, os desenvolvedores precisam coordenar e comunicar à mão quando estão contribuindo com código para o produto final. Esta coordenação vai além das equipes de desenvolvimento até operações, bem como o restante da organização. As equipes de produto devem coordenar quando funções e correções vão ser lançadas em sequência e quais membros da equipe vão ser os responsáveis.

A comunicação excessiva em um ambiente sem integração contínua pode se tornar uma tarefa de sincronização complexa e intricada, que acrescenta custos burocráticos desnecessários ao projeto. Assim as versões de códigos ficam mais lentas e com maiores taxas de falha, pois requer que os desenvolvedores sejam sensíveis e cuidadosos com relação às integrações. Esses riscos crescem muito conforme o tamanho da equipe de engenharia e da base de código aumenta.

Sem um pipeline de integração contínua robusto, pode haver uma desconexão entre a equipe de engenharia e o restante da organização. A comunicação entre o produto e a engenharia pode ser complicada. A engenharia se tornar a caixa preta na qual o restante da equipe insere requerimentos e funções e, talvez, obtenha os resultados esperados. Assim vai ser mais difícil para a engenharia estimar o tempo de entrega das solicitações, pois o tempo para integrar as novas alterações acaba sendo um risco desconhecido.

O que faz a IC

A IC ajuda a dimensionar a contagem de pessoas e a entrega de resultado das equipes de engenharia. A introdução da IC no cenário mencionado acima permite que os desenvolvedores de software trabalhem com autonomia nas funções em paralelo. Quando estão prontos para mesclar essas funções em um produto final, podem fazer isso com rapidez e autonomia. A IC é uma prática valiosa e bem estabelecida em organizações modernas de engenharia de software de alto desempenho.

Como usar a IC

A integração contínua costuma ser usada com o fluxo de trabalho de desenvolvimento de software ágil. Uma organização vai compilar uma lista de tarefas que contém um roteiro do produto. Essas tarefas são então distribuídas entre os membros da equipe de engenharia de software para a entrega. O uso da integração contínua permite que essas tarefas de desenvolvimento de software sejam desenvolvidas com autonomia e em paralelo entre os desenvolvedores atribuídos. Uma vez que essas tarefas são concluídas, um desenvolvedor vai inserir o novo trabalho no sistema de integração contínua para que seja integrado com o restante do projeto.

IC vs. Implementação contínua vs. Entrega contínua

A integração, a implantação e a entrega contínuas são as três fases de um pipeline de lançamento de software automatizado, incluindo um pipeline de DevOps. Essas três fases conduzem o software desde a concepção até a entrega ao usuário final. A fase de integração é o primeiro passo no processo. A integração contínua abrange o processo de vários desenvolvedores na tentativa de mesclar as alterações de código com o repositório de código principal de um projeto.

A entrega contínua é a próxima extensão da integração contínua. A fase da entrega é responsável por preparar um artefato a ser entregue aos usuários finais. Esta fase executa ferramentas de criação automatizadas para gerar o artefato. Essa fase de criação é mantida "verde", que significa que o artefato deve estar pronto para ser implementado aos usuários a qualquer momento.

A implementação contínua é a fase final do pipeline. A fase de implementação se ocupa do lançamento e do oferecimento automáticos do artefato de software aos usuários finais. No momento da implementação, o artefato passou pelas fases de integração e de entrega. Agora é a vez de implementar ou distribuir o artefato a partir de programação. Essa etapa vai acontecer por meio de ferramentas e scripts programados que movem o artefato aos servidores públicos ou a qualquer mecanismo de distribuição, como uma loja de aplicativos.


Benefícios e desafios da integração contínua

A Integração contínua é um aspecto essencial do DevOps e das equipes de software de alto desempenho. Os benefícios da integração contínua não são limitados à equipe de engenharia, mas beneficia muito a organização como um todo. A integração contínua permite melhor transparência e insight no processo de desenvolvimento e entrega do software. Esses benefícios permitem que o restante da organização planeje e execute melhor as estratégias de mercado. A seguir, alguns dos benefícios organizacionais gerais da integração contínua.

Permitir escalabilidade

A integração contínua permite que as organizações dimensionem o tamanho das equipes de engenharia, da base de códigos e a infraestrutura. Ao minimizar o excesso de burocracia de integração de código e de comunicação, a integração contínua ajuda a criar fluxos de trabalho de DevOps e ágeis. Assim cada membro da equipe pode ser dono de uma nova alteração de código definida até o lançamento. A integração contínua permite a escalabilidade ao remover quaisquer dependências organizacionais entre o desenvolvimento de funções individuais. A partir de agora, os desenvolvedores podem trabalhar nas funções em um silo isolado e ter a certeza de que os códigos vão ser integrados com perfeição ao restante da base de códigos, que é um processo central de DevOps.

Melhorar o ciclo de feedback

Outro efeito colateral poderoso da integração contínua é o feedback mais rápido sobre decisões de negócios. As equipes de produto podem testar ideias e iterar os desenhos de produtos com mais rapidez com uma plataforma de integração contínua otimizada. As alterações podem ser enviadas e avaliadas com rapidez para obter êxito. Bugs e outros problemas podem ser analisados e solucionados com rapidez.

Aumentar a comunicação

A integração contínua melhora a comunicação geral de engenharia e a prestação de contas, o que permite uma maior colaboração entre desenvolvimento e operações em uma equipe de DevOps. Ao inserir os fluxos de trabalho da solicitação pull vinculados à integração contínua, os desenvolvedores ganham compartilhamento de conhecimento passivo. As solicitações pull permitem que os desenvolvedores observem e comentem sobre código de outros membros da equipe. Os desenvolvedores podem agora visualizar e colaborar nas ramificações da função com outros desenvolvedores enquanto as funções progridem pelo pipeline da integração contínua. A integração contínua também pode ser usada para ajudar no controle de qualidade do gasto do recurso. Um pipeline de integração contínua eficiente. com cobertura de teste automatizado de alta confiança, vai proteger contra regressões e garantir que as novas funções correspondam a uma especificação. Antes que o novo código seja mesclado, ele precisa passar pelo suíte de asserção de testes de integração contínua, que vai prevenir quaisquer regressões novas.

Os benefícios da integração contínua superam de longe quaisquer desafios na adoção. Dito isto, é importante estar ciente dos desafios da integração contínua. Os desafios reais da integração contínua surgem ao passar uma forma de projeto sem integração contínua para integração contínua. A maioria dos projetos de software modernos vão adotar a integração contínua desde os estágios iniciais e amenizar os desafios de uma adoção posterior.

Adotar e instalar

Os desafios da integração contínua estão, em grande parte, em torno da equipe de adoção e da instalação técnica inicial. Se, no momento, uma equipe não tem uma solução de IC em uso, pode ser um pouco difícil escolher uma solução e começar com ela. Sendo assim, são necessárias algumas considerações acerca da infraestrutura de engenharia existente ao instalar um pipeline de IC.

Curva de aprendizagem de tecnologia

A funcionalidade da integração contínua vem com uma lista de tecnologias de suporte que podem ser investimentos de curva de aprendizagem a encargo da equipe. Essas tecnologias são sistemas de controle de versão, infraestrutura de hospedagem e tecnologias de orquestração.


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

Desenvolvimento orientado por teste

Assim que um projeto estabelece um pipeline de IC com cobertura de teste automático, a prática recomendada é desenvolver e melhorar sempre a cobertura de teste. Cada nova função que segue pelo pipeline de IC deve ser acompanhado de um conjunto de testes para assegurar que o novo código se comporte como o esperado.

O Test Driven Development (Desenvolvimento orientado por teste, TDD) é uma prática de escrever o código de teste e os casos de teste antes de fazer qualquer código de função real. O TDD puro pode ter o envolvimento próximo da equipe de produto para ajudar a construir uma especificação de comportamento de negócios esperado, que pode ser então transformada em casos de teste. Em um cenário de TDD puro, os desenvolvedores e a equipe de produto podem se reunir e discutir sobre uma especificação ou uma lista de requerimentos. A lista de requerimentos pode então ser convertida em uma lista de verificação de asserções de código. Então, os desenvolvedores vão escrever o código que corresponda a essas asserções.

Solicitações pull e análise de códigos

A maioria das equipes de desenvolvimento de software modernas praticam um fluxo de trabalho de análise de código e de solicitação pull. As solicitações pull são uma prática essencial para uma integração contínua eficaz. Uma solicitação pull é criada quando um desenvolvedor está pronto para mesclar um novo código à base de códigos principal. A solicitação pull notifica os outros desenvolvedores sobre o novo conjunto de alterações que estão prontas para integração.

As solicitações pull são o momento certo para o início do pipeline de integração contínua e da execução do conjunto de passos de aprovação automatizadas. Além disso, é comum o acréscimo de um passo de aprovação manual no momento da solicitação pull, durante o qual um engenheiro de parte não interessada executa uma análise de código da função. Assim é possível ter um novo olhar na análise o novo código e a funcionalidade. A parte não interessada vai fazer sugestões de edição e aprovar ou negar a solicitação pull.

Pull requests e análise de código são ótimas ferramentas para garantir uma comunicação passiva e compartilhar conhecimento entre a equipe de engenharia. Elas ajudam na proteção contra o débito técnico na forma de silos de conhecimento, em que engenheiros específicos são as únicas partes interessadas para certas funções de uma base de códigos.

Otimizar a velocidade do pipeline

Já que o pipeline de IC será um processo central e usado com frequência, é importante otimizar a velocidade da execução. Qualquer pequeno atraso no fluxo de trabalho da IC vai comprometer muito a taxa de crescimento das versões da função, do tamanho da equipe e do tamanho da base de dados. A prática recomendada é medir a velocidade do pipeline da IC e otimizar conforme necessário.

Um pipeline de IC mais rápido permite um ciclo de feedback do produto mais rápido. Os desenvolvedores podem enviar as alterações com mais rapidez e experimentar novas ideias de função para ajudar a melhorar a experiência do usuário. Qualquer reparação de bug pode ser corrigida e resolvida com rapidez assim que for descoberta. Esse aumento na velocidade da execução pode oferecer tanto uma vantagem sobre outros concorrentes como uma experiência de qualidade superior aos clientes.


Introdução à integração contínua

A dependência fundamental da IC é um sistema de controle de versão (VCS). Se a base de códigos alvo para uma instalação de IC não tiver VCS, o primeiro passo é instalar um VCS. É muito pouco provável que em bases de códigos modernas não exista um VCS. Alguns VCSs populares são o Git, o Mercurial e o Subversion.

Assim que o controle de versão estiver em vigor, o próximo passo é encontrar uma plataforma de hospedagem de controle de versão. As ferramentas de hospedagem de controle de versão mais modernas têm suporte e funções incorporadas para IC. Algumas plataformas de hospedagem de controle de versão populares são o Bitbucket, o Github e o Gitlab.

Após os controles de versão terem sido estabelecidos no projeto, os passos de aprovação da integração devem ser adicionados. O passo de aprovação de integração mais valioso a ser colocado em vigor são os testes automatizados. Acrescentar testes automatizados ao projeto pode ter um custo inicial excessivo. Uma estrutura de testes tem que ser instalada; a seguir, o código e os casos de teste devem ser escritos pelos desenvolvedores.

Algumas ideias para adicionar outros mecanismos de aprovação de IC mais baratos são os verificadores de sintaxe, formatadores de estilo de código ou verificadores de vulnerabilidade de dependência. Assim que tiver um sistema de controle de versão definido, com alguns passos de aprovação de mescla em vigor, você estabeleceu uma integração contínua!

A IC não é apenas um processo de negócio específico de engenharia. O restante da organização, equipes de produto, marketing e vendas, também vão se beneficiar de um pipeline de IC. As equipes de produto precisarão pensar em como tornar paralela a execução de fluxos simultâneos de desenvolvimento. Produto e engenharia vão trabalhar próximos para determinar as expectativas que qualificam a funcionalidade do negócio que vão compor o suíte de testes automatizados.

Os setores de marketing e vendas vão poder consultar o pipeline da integração contínua para coordenar os esforços de comunicação e eventos voltados para o cliente. A integração contínua dá um nível de transparência ao restante da organização sobre como a execução da engenharia está progredindo. Essa utilidade de transparência e comunicação se integra com perfeição a um fluxo de trabalho de desenvolvimento de projeto ágil.


Conclusão...

Se sua organização se esforça para colher os benefícios de uma abordagem DevOps ou simplesmente tem uma equipe de software com vários desenvolvedores, a integração contínua é importante. Ela vai ajudar sua organização de engenharia a executar com mais rapidez e eficácia.

A IC é um acessório padrão de organizações modernas de desenvolvimento de software de alta eficiência. As melhores empresas têm pipelines de IC robustos e não pensam duas vezes sobre outros investimentos em eficiência. Os benefícios da IC não se limitam à equipe de engenharia e são aplicáveis em toda a organização.

Existem muitas ferramentas de terceiros para ajudar na gestão e instalação de integração contínua. Algumas opções populares são: Codeship, Bitbucket Pipelines, SemaphoreCI, CircleCI, Jenkins, Bamboo, TeamCity e muitas outras. Essas ferramentas têm guias próprios de configuração detalhada e documentação para ajudar a começar.

Algumas das melhores ferramentas de integração contínua são disponibilizadas pela Atlassian:

O Bitbucket Pipelines é de grande utilidade para que os projetos estejam atualizados com funções de integração contínua modernos.

O Jira é uma das ferramentas de gestão de projeto ágil e de DevOps mais populares do mundo. O Jira tem forte integração com outros projetos de Bitbucket e, quando acompanhado por um pipeline de integração contínua, pode dar uma visão muito transparente da integridade executiva de uma empresa.

Max Rehkopf
Max Rehkopf

Digo que sou o "muppet do caos” e, por isso, uso as práticas ágeis e os princípios lean para trazer ordem ao dia a dia. Fico muito feliz em compartilhar essas lições com outras pessoas por meio dos diversos artigos, palestras e vídeos que faço para a Atlassian 


Leitura recomendada

Marque esses recursos para aprender sobre os tipos de equipes de DevOps ou para obter atualizações contínuas sobre DevOps na Atlassian.

Ilustração do DevOps

Comunidade de DevOps

Ilustração do DevOps

Leia o blog

Ilustração do mapa

Comece gratuitamente

Inscreva-se para receber a newsletter de DevOps

Thank you for signing up