CI/CD é a abreviação de Continuous Integration/Continuous Delivery, traduzindo para o português: integração e entrega contínuas. Trata-se de uma prática de desenvolvimento de software que visa tornar a integração de código mais eficiente por meio de builds e testes automatizados. Com a abordagem CI/CD é possível entregar aplicações com mais frequência aos clientes. Para tanto, regras de automação são aplicadas nas etapas de desenvolvimento de apps.

Os principais conceitos atribuídos ao método são: integração, entrega e implantação contínuas. Com a prática CI/CD é possível solucionar os problemas que a integração de novos códigos pode causar às equipes de operações e desenvolvimento — o famoso "inferno de integração".

Especificamente, CI/CD aplica monitoramento e automação contínuos a todo o ciclo de vida das aplicações, incluindo as etapas de teste e integração, além da entrega e implantação. Juntas, essas práticas relacionadas são muitas vezes chamadas de "pipeline de CI/CD". Elas são compatíveis com o trabalho conjunto das equipes de operação e desenvolvimento que usam métodos ágeis, com uma abordagem de DevOps ou de engenharia de confiabilidade de sites (SRE).

O acrônimo CI/CD tem alguns significados. "CI" sempre se refere à integração contínua, que é um processo de automação para desenvolvedores. Uma CI bem-sucedida é quando novas mudanças no código de uma aplicação são desenvolvidas, testadas e consolidadas regularmente em um repositório compartilhado. É a solução ideal para evitar conflitos entre ramificações quando muitas apps são desenvolvidas ao mesmo tempo.

"CD" se refere à entrega contínua e/ou à implantação contínua, conceitos relacionados e usados alternadamente às vezes. Em ambos os casos, trata-se da automação de fases avançadas do pipeline. Porém, são usados às vezes separadamente para ilustrar o nível de automação presente.

Geralmente, a entrega contínua representa as mudanças feitas por desenvolvedores em uma aplicação para verificar automaticamente a presença de bugs e carregá-las em um repositório, como o GitHub ou um registro de containers. Nesse repositório, a equipe de operação pode implantar essas mudanças em um ambiente de produção ativo. Isso resolve o problema de baixa visibilidade e comunicação entre as equipes de negócios e desenvolvimento. Por isso, a finalidade da entrega contínua é reduzir ao máximo o esforço na implantação de novos códigos.

A implantação contínua, outro significado para "CD", se refere ao lançamento automático das mudanças feitas por uma pessoa desenvolvedora, do repositório à produção, onde podem ser usadas por clientes. Assim, as equipes de operação não ficam sobrecarregadas com processos manuais que atrasam a entrega de apps. Esse conceito aproveita os benefícios da entrega contínua ao automatizar a próxima etapa no pipeline.

CI/CD Flow

A abordagem de CI/CD pode especificar apenas as práticas relacionadas da integração e entrega contínuas ou as práticas dessas duas mais as da implantação contínua. Para dificultar ainda mais, às vezes, o termo "entrega contínua" também engloba os processos da implantação contínua.

Por fim, não vale a pena se prender a esses conceitos. Basta se lembrar de que CI/CD é, na verdade, um processo muitas vezes visto como um pipeline, que envolve a inclusão de um alto nível de automação e monitoramento contínuos no desenvolvimento de aplicações.

Em cada caso, o que esses termos querem dizer depende da quantidade de automação implantada no pipeline de CI/CD. Muitas empresas primeiro adicionam CI e depois trabalham para automatizar a entrega e implantação. Por exemplo, como parte de aplicações nativas em nuvem.

Nossos especialistas podem ajudar sua organização a desenvolver as práticas, as ferramentas e a cultura necessárias para modernizar e criar aplicações de forma mais eficiente.

No desenvolvimento moderno de aplicações, o objetivo é que muitos desenvolvedores trabalhem ao mesmo tempo em diferentes funcionalidades na mesma app. No entanto, se uma organização tiver que consolidar todo o código-fonte de ramificação em apenas um dia (conhecido como "merge day" ou "dia de consolidação"), o trabalho poderá ser entediante, manual e demorado. Isso acontece porque quando uma pessoa desenvolvedora que trabalha isoladamente realiza uma mudança em uma aplicação, há uma chance de haver conflito com mudanças feitas ao mesmo tempo por colegas. Esse problema pode ser agravado se cada uma dessas pessoas tiver seu próprio ambiente de desenvolvimento integrado (IDE) personalizado. O ideal seria que a equipe entrasse em acordo com apenas um IDE baseado em nuvem.

Com a integração contínua (CI), a equipe consolida as mudanças no código de volta a uma ramificação compartilhada (ou "tronco") com mais frequência (às vezes, até diariamente). As mudanças são consolidadas e depois validadas através da criação automática da aplicação. Vários testes automatizados, geralmente de unidade e integração, são feitos para garantir que as mudanças não corrompam a aplicação. Basicamente, tudo é testado, incluindo classes, funções e diferentes módulos que formam toda a aplicação. Em caso de conflito entre os códigos novos e existentes, a CI facilita a correção desses bugs com rapidez e frequência.

Após a automação de compilações e dos testes de integração e unidade na CI, a entrega contínua automatiza o lançamento desse código validado em um repositório. Portanto, para ter um processo eficaz de entrega contínua, é importante que a CI já esteja integrada ao pipeline de desenvolvimento. O objetivo da entrega contínua é fazer com que a base de códigos esteja sempre pronta para implantação em um ambiente de produção.

Cada etapa da entrega contínua, desde a consolidação das mudanças de código até a entrega de compilações prontas para produção, inclui a automação do lançamento de códigos e de teste. No final desse processo, a equipe de operação pode implantar uma app no ambiente de produção com rapidez e facilidade.

A etapa final de um pipeline de CI/CD sólido é a implantação contínua. Ela é um complemento da entrega contínua, que automatiza o lançamento de versões prontas para produção em um repositório de códigos. A implantação contínua automatiza o lançamento de uma app para a produção. Como não há um canal manual na etapa do pipeline antes da produção, a CI depende muito da automação otimizada dos testes.

Na prática, a implantação contínua significa que a mudança da pessoa desenvolvedora em uma aplicação em nuvem é habilitada depois de alguns minutos após a gravação (supondo que ela seja aprovada nos testes automatizados). Isso facilita muito mais o recebimento do feedback de usuários e a incorporação dele. Juntas, todas essas práticas de CI/CD relacionadas diminuem o risco da implantação de aplicações, facilitando o lançamento das mudanças em pequenas partes, e não de uma só vez. No entanto, há também a necessidade de muitos investimentos iniciais, já que os testes automatizados precisam ser gravados para acomodar várias etapas de teste e lançamento no pipeline de CI/CD.

As ferramentas de CI/CD ajudam a equipe a automatizar o desenvolvimento, a implantação e os testes. Algumas ferramentas tratam especificamente da integração (CI), algumas gerenciam o desenvolvimento e a implantação (CD) e outras são especializadas em testes contínuos ou funções relacionadas.

Uma das ferramentas open source mais conhecidas para CI/CD é o servidor de automação Jenkins. O Jenkins foi criado para lidar com todos os processos, desde um simples servidor CI até um hub de CD completo.

Tekton Pipelines é um framework de CI/CD para plataformas Kubernetes que proporciona uma experiência de CI/CD nativa em nuvem padrão com containers.

Além do Jenkins e do Tekton Pipelines, confira estas outras ferramentas open source de CI/CD:

  • Spinnaker, uma plataforma de CD criada para ambientes multicloud.

  • GoCD, um servidor de CI/CD voltado para modelagem e visualização.

  • Concourse, "uma plataforma open source contínua".

  • Screwdriver, uma plataforma de compilação criada para CD.

Convém às equipes considerar as ferramentas de CI/CD gerenciadas, disponíveis em uma variedade de fornecedores. Todos os principais provedores de nuvem pública oferecem soluções de CI/CD, além de GitLabCircleCITravis CIAtlassian Bamboo e muitos outros.

Aliás, é provável que qualquer ferramenta essencial para DevOps faça parte de um processo de CI/CD. As ferramentas de automação de configuração (como AnsibleChef e Puppet), os ambientes de execução (como o Dockerrkt e cri-o) e a orquestração de container (Kubernetes) não são necessariamente ferramentas de CI/CD, mas aparecerão em vários fluxos de trabalho desse tipo.

Comentários

Postagens mais visitadas deste blog

Spring Toll Suite - Instalando o Spring boot