A integração contínua e a entrega contínua (CI/CD) são os campos gravitacionais em torno dos quais orbita o fluxo de trabalho DevOps moderno. As organizações que pretendem criar código eficiente e relativamente livre de erros a grande velocidade têm de adotar pipelines de CI/CD como uma arquitetura essencial do seu sistema de entrega de software.
Antes de os pipelines de integração contínua e entrega contínua se tornarem populares, as alterações ao código eram introduzidas manualmente nos sistemas de produção através de fluxos de trabalho ad hoc, muitas vezes sem testes normalizados. Felizmente, vivi para contar as histórias angustiantes de trabalhar em ambientes de teste de software que não dispunham destes processos essenciais.
Por outro lado, vi em primeira mão como as ferramentas de CI/CD e os processos fornecem uma estrutura eficaz para entregar software de qualidade de forma rápida e fiável.
Com base na minha experiência profissional, explicarei o que constitui um pipeline de CI/CD, como funciona e por que motivo as equipas de engenharia de software o adotaram, tanto na prática como filosoficamente, juntamente com outros princípios, como a metodologia de testes Agile.
O que é um pipeline de CI/CD?
Um pipeline de CI/CD é um processo transparente, automatizado e fiável de desenvolvimento e entrega de software. Um pipeline de CI/CD é composto por dois componentes distintos: a integração contínua e a entrega contínua, que facilitam um fluxo de trabalho DevOps ágil.
Ambos os componentes dependem fortemente da automatização para reduzir os erros e garantir uma engenharia de software de elevada qualidade, eliminando processos manuais árduos. Assim, fundamentalmente, um pipeline de CI/CD fornece uma série de etapas para a entrega automatizada de software.
A componente de CI incentiva os programadores e os engenheiros de software a criarem software escrevendo código e executando testes com frequência. São incentivados a submeter regularmente as alterações ao código e as novas funcionalidades em pequenos lotes de código-fonte num repositório de base de código.
Por outro lado, a componente de CD garante que uma organização de software dispõe sempre de um artefacto de software pronto para implementação, já sujeito a garantia de qualidade e validado por verificações de segurança.
As quatro principais fases de um pipeline de CI/CD
Fase do código-fonte
Esta é a fase inicial do pipeline. É acionada ou iniciada quando um programador efetua uma alteração numa base de código. Normalmente, isto acontece quando um programador executa o comando git push ou git merge para submeter código-fonte no repositório de código de um sistema de controlo de versões.
Have an account? Log In
Fase de compilação
A fase de compilação é, em grande medida, aquilo que o nome indica. Em sistemas de contentores baseados em microsserviços, como o Docker, isto envolve agrupar o código-fonte do projeto e as respetivas dependências em unidades autónomas. Estas são posteriormente compiladas para criar uma instância executável da aplicação de software. No entanto, importa salientar que a etapa de compilação é necessária para linguagens como Java e C++. A compilação é ignorada para linguagens interpretadas, como Python e JavaScript.
Quando um artefacto de software não consegue ultrapassar esta fase, isso indica frequentemente problemas fundamentais e subjacentes, como uma configuração arquitetural deficiente. Isto significa inevitavelmente que os arquitetos e engenheiros de software têm de voltar à estaca zero para resolver o problema.
Fase de testes
Como o nome indica, esta é a fase de testes do pipeline. Aqui, a automatização integrada de um pipeline de CI/CD demonstra o seu valor ao poupar tempo e esforço à equipa. Vários testes, como testes de fumo, testes unitários e testes de integração, são automatizados e executados para avaliar a validade e a lógica da aplicação.
Fase de implementação
Na fase de implementação, a instância testada e executável da aplicação é disponibilizada no ambiente de implementação necessário. As organizações mantêm normalmente vários ambientes de preparação por vários motivos.
Por exemplo, os ambientes alfa destinam-se a testes de aceitação pelo utilizador, para identificar erros na aplicação antes de esta ser disponibilizada aos utilizadores do produto. A versão beta é uma disponibilização limitada a alguns utilizadores selecionados; segue-se o ambiente de produção para o público em geral. A fase de implementação é exemplificada pela necessidade de manter um nível aceitável de garantia de qualidade.
O que é a integração contínua (CI)?
CI significa integração contínua, enquanto CD significa implementação contínua. Em conjunto, garantem que as equipas de DevOps dispõem de um método sustentável para gerar versões de software fiáveis. Em conjunto, encurtam o ciclo temporal entre a conceção, a idealização e a produção de software utilizável.
No entanto, estes dois pilares do pipeline moderno de entrega de software não são lados opostos da mesma moeda, nem o yin e o yang do mesmo fenómeno.
Tanto a integração contínua como a entrega contínua são suficientemente complexas e distintas para merecerem um tratamento individual e uma definição aprofundada.
Por que motivo é necessária a CI?
O papel da CI é proporcionar um processo simplificado, fiável e automatizado para escrever, compilar e testar aplicações de software. Enquanto processo, a CI está orientada para compilar, testar e integrar código-fonte na base de código de um projeto várias vezes por dia.
O processo de CI também procura proporcionar um nível consistente de produtividade no desenvolvimento de software. Consegue-o através da promoção de práticas DevOps que incentivam os testes automatizados e a integração frequente de código novo num repositório central.
Normalmente, os programadores produzem regularmente grandes quantidades de código-fonte, quer para criar novas funcionalidades, quer para corrigir erros em funcionalidades existentes. No entanto, os programadores raramente trabalham isolados; fazem parte de equipas de desenvolvimento nas quais a colaboração com outros programadores é crucial para o sucesso do projeto.
Por isso, deixar o código nos computadores locais durante um período prolongado é prejudicial para o resto da equipa. Entre outras razões, integrar código novo demasiado tarde no ciclo de lançamento pode quebrar inadvertidamente outras funcionalidades.
As ferramentas de integração contínua maximizam a prática de incentivar os programadores a integrar as alterações de código no repositório partilhado da equipa. De preferência, várias vezes por dia.
O que é a Entrega Contínua (CD)?
Como referi acima, a entrega contínua surge depois da integração contínua. Abrange os processos e a infraestrutura que suportam a preparação das alterações de código para o lançamento no ambiente de produção. O objetivo geral da CD é garantir que uma organização tem sempre no seu pipeline um artefacto de software compilado, testado, validado e pronto para implementação.
A infraestrutura da CD para aprovisionamento e implementação procura proporcionar um pipeline rápido, mas sustentável e sem erros, para preparar e lançar compilações de software em produção. Procura também reduzir o tempo necessário para realizar verificações de segurança e implementar artefactos de software.
Porque é que a CD é importante?
Tal como a integração contínua, as ferramentas de CD dependem fortemente da automatização e dos testes automatizados para validar a integridade de uma compilação de software antes de esta ser implementada. O processo também permite às equipas de engenharia de software estabelecer uma referência de qualidade para o seu código antes da entrada em produção.
É importante notar que, embora a entrega contínua seja um processo automatizado, a intervenção manual continua a ser necessária nesta fase do pipeline.
Diferença entre Entrega Contínua e Implementação Contínua
Tanto a entrega contínua como a implementação contínua têm o mesmo objetivo, mas com uma diferença significativa na execução.
- Implementação contínua: todas as alterações de código integradas na base de código são automaticamente implementadas em produção. Não existe qualquer mecanismo de aprovação ou processo manual que funcione como uma salvaguarda preventiva. É um processo totalmente automatizado para a implementação efetiva.
- Entrega contínua é um processo parcialmente manual, mas torna a estratégia de lançamento muito mais segura e sustentável.
Porque é importante um pipeline de CI/CD em DevOps?

É necessária alguma perspetiva histórica para compreender a necessidade e a evolução dos métodos atuais de entrega de software. Durante as primeiras fases do desenvolvimento de aplicações de software, o modelo em cascata estava em voga.
Este modelo simples abordava um projeto de software dividindo-o em fases sequenciais e lineares. Seguia uma metodologia rígida que não permitia a sobreposição de fases — uma fase tinha de ser concluída antes de a seguinte poder começar. Além disso, cada etapa dependia dos resultados da etapa anterior.
Por isso, o modelo geral exigia uma determinada especialização de tarefas para funcionar. No entanto, esta especialização obrigava as equipas de engenharia de software e de testes a serem segregadas nos seus próprios silos, com programadores, testadores e engenheiros de fiabilidade de sites a trabalharem frequentemente de forma isolada.
More Articles
O Modelo em Cascata
O modelo em cascata era ideal para uma época em que as empresas de software distribuíam produtos aos consumidores em CDs embalados, com datas de lançamento anunciadas publicamente. No entanto, este modelo não se adequa à era moderna, que valoriza a produção de código a alta velocidade. Isto é especialmente verdade com a computação na nuvem e os omnipresentes modelos de software como serviço (SaaS), que elevaram as expectativas dos utilizadores finais relativamente à melhoria contínua do software e à implementação contínua de funcionalidades.
Por inúmeras razões, o modelo em cascata revelou-se insuficiente.
Juntamente com boas práticas, como a metodologia ágil, as modernas equipas de DevOps incorporam pipelines de CI/CD para fornecer software de elevada qualidade e exaustivamente testado, com grande rapidez e de forma sustentável.
Através de DevOps, a CI/CD fornece uma forma prática de ultrapassar os silos entre programadores, equipas de operações e outros participantes no processo de desenvolvimento e entrega de software.
Os princípios da CI/CD reduzem o risco e a incerteza, especialmente em projetos complexos que precisam de ser suficientemente ágeis para acomodar requisitos que mudam frequentemente.
As vantagens de implementar um pipeline de CI/CD
Algumas vantagens de um pipeline de CI/CD são extremamente evidentes, como a automatização integrada, que reduz drasticamente os processos manuais propensos a erros. Eis algumas outras vantagens dos pipelines de CI/CD:
- Proporcionar operações de implementação com o mínimo de atrito possível. Um pipeline de CI/CD fornece aos operadores de TI um processo relativamente fácil de utilizar e simples, que reduz a complexidade da criação e implementação de aplicações. Este processo simplificado é amplamente facilitado pela funcionalidade de automatização integrada na CI/CD.
- Melhorar a velocidade das operações. A iteração mais rápida dos produtos é possível graças à automatização e a ciclos de feedback mais rápidos. A automatização fornece aos técnicos de DevOps informações imediatas sobre a viabilidade de uma compilação.
As integrações de CI mais pequenas e as implementações de CD mais pequenas melhoram as métricas de DevOps, como o Tempo médio de resolução (MTTR). O MTTR mede o tempo médio necessário para corrigir funcionalidades e erros, incluindo o diagnóstico dos problemas subjacentes. O processo geral de CI/CD reduz o tempo necessário para resolver problemas, testar, criar e implementar uma aplicação. - Aumentar a produtividade: O principal princípio da integração contínua consiste em incentivar os programadores a integrar frequentemente o seu código no ramo principal da organização. Isto aumenta a probabilidade de todos os membros da equipa de DevOps disporem do código funcional mais recente.
Isto é crucial, uma vez que trabalhar na iteração mais recente da base de código protege todos de trabalharem com pressupostos desatualizados sobre o projeto, as suas funcionalidades atuais e capacidades. Esta prática aumenta a produtividade e a colaboração em projetos de software. Por sua vez, melhora o tempo global de colocação dos produtos no mercado de uma organização. - Encurtar o ciclo de lançamento, juntamente com a capacidade de lançar software a pedido. Na nossa era digital, as empresas precisam de agilidade para permanecerem viáveis, reagindo rapidamente às mudanças do mercado. Os clientes com conhecimentos tecnológicos exigem cada vez mais funcionalidades sofisticadas, como a personalização e funcionalidades de IA de ponta.
Para acompanhar a evolução dos tempos, os pipelines de CI/CD não só ajudam as organizações a aumentar a velocidade de entrega de software para responder ao mercado, como também mantêm o seu conjunto de software num estado permanentemente pronto para lançamento. - Ter a capacidade de dar prioridade às implementações de funcionalidades. Além de facilitar a velocidade das operações, a infraestrutura de CI/CD permite aos engenheiros de sites dar ênfase às funcionalidades que precisam de ser implementadas imediatamente ou que devem ter prioridade sobre outras.
- Detetar erros mais rapidamente e corrigir problemas com maior rapidez. Uma vez que as alterações ao código são integradas com maior frequência, a CI facilita a deteção e correção de erros, falhas e outras incompatibilidades numa fase muito mais precoce do processo de desenvolvimento de software. Isto é especialmente relevante no caso de correções de erros com níveis de prioridade elevados para implementação, sobretudo as que corrigem erros de dia zero.
- Reduzir as falhas e atenuar o risco. A CI/CD fornece várias camadas de salvaguardas e proteções ao longo do ciclo de vida do desenvolvimento e das fases de implementação. O efeito cumulativo destes mecanismos à prova de falhas e de deteção inteligente de falhas reduz a exposição ao risco enfrentada pelas equipas de desenvolvimento de software na produção de código viável.
A automatização integrada e os testes automatizados no pipeline de CI/CD incentivam os testes contínuos através de procedimentos como testes unitários, testes de integração, testes de regressão, entre outros. Além disso, os sistemas de CI/CD emitem várias notificações durante a fase de compilação, alertando os gestores de TI e os engenheiros de sites quando algo corre mal. - Melhorar o controlo de qualidade e minimizar as oportunidades de erro humano. A automatização elimina a necessidade de intervenção humana propensa a erros. A CI desencadeia uma nova compilação sempre que as alterações ao código são integradas no repositório central. Isto é normalmente acompanhado por testes unitários e testes de integração para garantir que o novo código é compatível com o sistema. Este processo, em grande medida isento de atrito, é uma boa prática que introduz no sistema um certo nível de controlo e garantia de qualidade.
- Incentivar a experimentação e a inovação. A mentalidade de DevOps, que consiste em introduzir pequenos blocos de código, estimula a inovação. Principalmente porque o processo envolve uma exposição ao risco muito menor, dando às equipas maior liberdade para experimentar e inovar. Isto incentiva o espírito das empresas emergentes a “avançar rapidamente e quebrar coisas.”
- Criar lançamentos fiáveis. Como referido acima, a implementação de lotes de software frequentes, mas pequenos, envolve menos riscos. A menor dimensão da implementação também facilita a gestão, especialmente para identificar se foram introduzidos erros no sistema. Na maioria dos casos, pode ser tão simples como identificar a implementação mais recente que desencadeou o erro.
Considerações finais
Key Takeaways
DevOps gravitacional: A integração contínua (CI) e a entrega contínua (CD) constituem o núcleo do DevOps moderno, sendo essenciais para fornecer software de forma rápida, económica e com poucos erros.
Do caos à ordem: A transição de introduções pontuais e manuais de alterações de código para pipelines de CI/CD normalizados e automatizados revolucionou a fiabilidade e a velocidade do desenvolvimento de software.
O caminho automatizado: Os pipelines de CI/CD automatizam a entrega de software, desde as alterações de código em pequenos lotes e os testes automatizados até à garantia de um produto pronto para implementação, reduzindo os erros e aumentando a eficiência.
Fases do sucesso: O pipeline de CI/CD é composto por fases que incluem a origem (início das alterações de código), a compilação (compilação e preparação), os testes (validação da lógica e da funcionalidade) e a implementação (lançamento nos ambientes).
A integração encontra a implementação: A integração contínua (CI) e a implementação contínua (CD), em conjunto, proporcionam uma estrutura produtiva para as equipas de DevOps, encurtando o ciclo desde a conceção do software até à produção.
Os pipelines de CI/CD são uma funcionalidade essencial para o desenvolvimento moderno de software e ajudam a produzir produtos de software de alta qualidade numa indústria de software dinâmica.
Se quiser saber mais sobre os avanços contemporâneos e de vanguarda no setor tecnológico, subscreva a newsletter The QA Lead.


