Para fornecer mais contexto sobre o termo "CI", vale a pena observar que "CI" é a abreviação de "continuous integration" ou integração contínua, como é frequentemente conhecida. A definição de CI é a seguinte: é a prática de fazer com que todos os que estão trabalhando no mesmo projeto mesclem regularmente suas alterações na base de código em um repositório central. Como os projetos geralmente têm mais de um desenvolvedor envolvido, é importante que as peças do trabalho sejam combinadas num local central. O ideal é que esse processo seja automatizado e realizado várias vezes ao dia. O objetivo da integração contínua é manter uma abordagem confiável para a construção e lançamento de um software, promovendo colaboração, automação e ciclos curtos de feedback.
A prática da integração contínua começa com a realização do commit de alterações num sistema de controle de fontes/versão, em intervalos regulares, para garantir que todos estejam construindo sobre a mesma base de código. Cada commit dispara um build e uma série de testes automatizados para verificar o comportamento e garantir que a mudança não tenha quebrado nada. Embora a integração contínua traga benefícios por si só, ela é também a primeira etapa para implementar um pipeline de CI/CD.
Ao adotarem uma definição clara de IC e implementarem a prática no seu processo de desenvolvimento, as equipes podem simplificar seus workflows e melhorar a qualidade de seus softwares.
Os principais ingredientes da integração contínua são os seguintes:
Para que todo mundo esteja construindo sobre a mesma base, todos precisam estar trabalhando no mesmo repositório e compartilhando suas alterações uns com os outros com frequência. Uma boa regra prática é fazer com que todos façam commit de suas alterações no master/trunk pelo menos uma vez por dia.
Depois de fazer commit de uma mudança, o próximo passo é construir a solução e submetê-la a uma série de testes automatizados para verificar seu comportamento. A automação desse processo é parte integrante da integração contínua; construir e/ou testar manualmente consome tempo e está sujeito a erros, sem contar que faz com que a meta de integrar as alterações diárias seja impraticável. As ferramentas de build e frameworks de teste que você usa dependem da linguagem na qual está trabalhando.
Depois que os scripts e testes estiverem implementados, o processo precisa ser mantido. Isto significa incluir testes automatizados como parte de quaisquer novos recursos, lidar com falhas e monitorar o desempenho do processo.
Adicionar um servidor de CI para cuidar do monitoramento do seu repositório, disparar builds, executar testes automatizados e agrupar resultados ajuda a juntar todas essas peças, economizando tempo na programação de uma lógica de automação personalizada e fornece insights adicionais, tais como métricas de cobertura de código e histórico de builds.
Embora essas ferramentas e processos sejam importantes na implementação da integração contínua, para obter o melhor da integração contínua, você precisa que as pessoas envolvidas adotem a prática. Como uma equipe de desenvolvimento, você precisa adaptar seus processos para incluir a prática de realizar commits ao master com frequência, acrescentar testes automatizados a qualquer novo recurso e priorizar a correção do build caso algo dê errado. Trabalhar com a equipe de QA para priorizar, projetar e manter testes automatizados e colaborar com a equipe de infraestrutura para provisionar máquinas nas quais os builds e testes possam ser executados ajudará a quebrar os silos organizacionais.
Embora a integração contínua traga benefícios não apenas para os desenvolvedores, mas para a empresa como um todo, isto não significa que ela é sempre recebida de braços abertos.
Para muitas empresas de desenvolvimento de software, o DevOps representa uma grande mudança na maneira como trabalham e desafia os processos existentes. A boa comunicação é fundamental para coordenar o esforço entre as equipes e incutir uma cultura de colaboração.
Se você já adota metodologias ágeis, a mudança é geralmente um pouco mais fácil, pois a importância de ouvir o feedback para garantir que você desenvolveu a coisa certa e a noção de equipes que se organizam sozinhas já devem ter ganhado força.
Quando esse não é o caso, reconhecer que esta é uma mudança significativa, envolver as pessoas, começar devagar e demonstrar os benefícios à medida que se avança pode ajudar a convencer seus colegas dos benefícios dessa prática.
A integração contínua também enfrenta desafios mais práticos. Se você estiver trabalhando com um aplicativo grande e monolítico, os tempos de compilação podem ser lentos e, se os ambientes de teste forem escassos, poderá ser um grande desafio paralelizar execuções dos testes.
Ter visibilidade do seu workflow de integração contínua e usar métricas para identificar gargalos pode ajudar a quantificar os custos e benefícios de investir em mudanças de arquitetura, infraestrutura adicional e cobertura de teste automatizado.
Com a ajuda da integração contínua, as equipes podem acelerar o ciclo de lançamento de software sem comprometer a qualidade. O principal objetivo da integração contínua é aliviar os riscos potenciais que podem surgir durante a implantação e encurtar o ciclo de feedback.
Os principais benefícios da integração contínua incluem:
Integração, entrega e implantação contínuas ajudam as empresas a reduzir custos e encurta significativamente o ciclo de entrega de softwares. Quando bem executadas, elas são indispensáveis para tornar o processo de criação, teste e lançamento de softwares mais eficiente. Algumas práticas recomendadas de CI/CD incluem:
Construir um pipeline de CI/CD estável e confiável é impossível sem as ferramentas de CI/CD apropriadas. Elas ajudam a coordenar diferentes partes do pipeline, desde o início da integração até o acionamento de testes automatizados e a implantação do código na produção. Não importa se a sua equipe usa uma ferramenta integrada de CI/CD que oferece suporte a todos os estágios do processo de CI/CD, como o TeamCity, ou se depende de diferentes instrumentos para diferentes propósitos: as ferramentas que você escolher devem ser compatíveis com toda a pilha de tecnologia com a qual sua equipe trabalha. Elas também devem ser capazes de se integrar com o restante dos softwares que você usa para trabalhar e ser personalizáveis e flexíveis o suficiente para suportar qualquer nível de complexidade do workflow.
Em vez de comparar os benefícios da CI e da CD, é mais útil considerar como essas diferentes partes do processo de desenvolvimento trabalham juntas para ajudar você a fornecer software sem erros aos usuários finais.
A integração contínua é o processo de mesclar alterações de código em um único branch principal. A entrega contínua opera sobre a automação de testes e de build estabelecida no estágio de integração contínua. A implantação contínua é o estágio final do processo de CI/CD, no qual a nova versão do software é entregue aos usuários finais assim que todos os requisitos são atendidos.
A adoção da integração contínua ajuda a acelerar o processo de desenvolvimento enquanto melhora a qualidade do código. A automação dessas etapas permite que você trabalhe com mais eficiência e se concentre em agregar valor para seus usuários. Mas a integração contínua é apenas o início do pipeline CI/CD. O estágio seguinte, a entrega contínua, aplica os princípios do DevOps à próxima parte do processo de lançamento.