O conceito Continuous Integration/Continuous Delivery (CI/CD) é muito utilizado e discutido entre as equipes que atuam com desenvolvimento de software.
Esta abordagem surgiu a partir da necessidade de os softwares receberem atualizações mais rápidas, ao mesmo tempo que apresentam cada vez menos defeitos. Construir um bom pipeline de CI/CD é um desafio gigantesco e as etapas que são automatizadas utilizando estes processos – como os testes unitários, integrados, funcionais, end-to-end (E2E) e de performance – garantem maior confiabilidade nas alterações do código, tornando as entregas mais rápidas e seguras.
Por ser mais popular entre os projetos com atualizações frequentes, a Integração Contínua (traduzida do termo em inglês “Continuous Integration”, ou CI) exerce o papel fundamental de garantir que cada componente funciona perfeitamente (tanto individualmente, como quando integrado), rodando as automações com alta frequência, seja uma vez ao dia ou de hora em hora.
Na prática, os desenvolvedores constroem e testam o código localmente antes de enviar o que foi desenvolvido para o repositório e, uma vez que essas alterações chegam ao repositório, é iniciada automaticamente uma sequência de etapas.
A primeira etapa, mais comum, é a construção do código mais recente do código-fonte. Se tudo correr bem, são iniciados os testes unitários. Se correrem bem, é iniciado o build para os ambientes de testes e, no final de cada etapa, é gerado um relatório detalhado com o status do processo, exibindo o número de compilações feitas, defeitos que possam ter ocorrido e o total de testes realizados.
Para exemplificar melhor este flow, um pipeline de CI executa as seguintes tarefas:
A Entrega Contínua (tradução de “Continuous Delivery”, ou CD), é uma sequência do que ocorreu na etapa de CI. Ambas se conectam, porque enquanto a CI trata da construção e dos testes, a CD trata de como implementar todos esses pacotes.
Antes da implementação de uma nova funcionalidade, a Continuous Delivery contempla um flow que inclui testes automatizados, unitários, testes de API e testes de carga e integração. Cada etapa é realizada de forma automática, garantindo testes automatizados a nível unitário, de integração e sistêmico. Como os testes podem falhar em qualquer nível e ambiente, o CI/CD deve garantir uma forma de relatar rapidamente as falhas aos desenvolvedores.
Dependendo das políticas e dos processos definidos pelas equipes, os desenvolvedores podem seguir estes passos:
É a fase em que se garante a qualidade na entrega com o mínimo de erros possível.
O objetivo é promover a atualização ou o lançamento somente quando passar nos testes de requisitos funcionais, permanecer estável e livre de defeitos. Normalmente, é um processo automatizado totalmente integrado no pipeline.
É bem mais fácil resolver e corrigir problemas enquanto eles ainda estão na base. Este tipo de ação impede que os códigos se multipliquem sobre uma base instável, o que acaba por reduzir o tempo e esforço na resolução de eventuais erros.
Atualmente, as ferramentas de teste automatizado têm total aderência com as ferramentas de CI/CD, permitindo que os dados de teste sejam alimentados diretamente no pipeline. Dependendo da ferramenta utilizada, podemos definir se seguiremos para a próxima etapa de teste com base nos resultados dos testes anteriores, garantindo que a cada etapa a equipe receba um report com os resultados informando o step seguinte.
Para garantir maior eficiência no pipeline, é recomendável montar a suíte de testes colocando os mais rápidos à frente dos mais complexos – assim pode ganhar-se mais tempo nas entregas.
Traçando estratégias na criação dos testes, temos de ter em mente a estrutura da pirâmide de testes, onde equilibramos os testes unitários, os de integração e os end-to-end.
Essa abordagem bem estruturada para testes de CI/CD garante uma cobertura abrangente, mantendo a eficiência e a eficácia durante todo o ciclo de vida de desenvolvimento de software.
Existem diversas ferramentas que permitem a utilização e práticas de testes em CI/CD, mas as mais populares são:
Quando falamos de testes CI/CD, todo o tipo de teste é válido, tanto manual, quanto automático. O facto é que o teste manual exige que o QA (Quality Assurance) tenha uma perceção apurada e veja diferentes formas de testar uma aplicação, garantindo a harmonia entre critérios simples como funcionalidade, usabilidade, acessibilidade e performance.
No entanto, em situações em que seja necessário testar um número elevado de cenários, o que acaba por aumentar as chances de erro humano decorrente da perda de atenção nos testes ou no próprio controle, isso pode vir a ser um fator que aumenta o tempo dos testes. Daí a importância de testes automatizados, pois podemos alimentar casos de testes repetitivos e complexos, economizando o tempo dos QA.
Os testes automatizados aceleram os ciclos de feedback ao verificar continuamente o código. É importante automatizar o máximo possível o processo de teste. Essa abordagem é adequada para executar grandes conjuntos de testes repetitivos e detetar regressões prontamente. Os tipos de testes que podem ser integrados como parte dos ciclos CI/CD são testes de unidade, testes de integração, testes de sistema e testes de regressão.
Como nem todos os casos de teste podem ser automatizados, é sempre recomendado uma abordagem que combine testes manuais e automatizados para garantir a entrega contínua.
Ao implementarmos pipelines de testes no fluxo de CI/CD, garantimos uma maior assertividade nos testes, pois reduzimos os tempos regressivos, garantimos uma maior qualidade do software e ganhamos tempo na resolução de bugs.
Otimizando estas etapas, abrimos mais espaço para que as equipes explorem a criatividade, trazendo insights acerca do produto e permitindo que os indivíduos tragam mais inovações.
Eis alguns dos principais benefícios da aplicação dos conceitos de CI/CD ao desenvolvimento de um produto de software:
Bom, chegámos à conclusão de que com pipelines de testes bem definidos, o time consegue desempenhar um papel fundamental para garantir uma entrega eficiente e com qualidade.
CI/CD são duas práticas recomendadas de DevOps, pois abordam o desalinhamento entre os desenvolvedores e a equipe operacional. Com a presença da automação, os desenvolvedores podem lançar alterações e novos recursos com mais frequência, enquanto as equipes de operação têm melhor estabilidade geral.
O conceito Continuous Integration/Continuous Delivery (CI/CD) é muito utilizado e discutido entre as equipes que atuam com desenvolvimento de software.
Esta abordagem surgiu a partir da necessidade de os softwares receberem atualizações mais rápidas, ao mesmo tempo que apresentam cada vez menos defeitos. Construir um bom pipeline de CI/CD é um desafio gigantesco e as etapas que são automatizadas utilizando estes processos – como os testes unitários, integrados, funcionais, end-to-end (E2E) e de performance – garantem maior confiabilidade nas alterações do código, tornando as entregas mais rápidas e seguras.
Por ser mais popular entre os projetos com atualizações frequentes, a Integração Contínua (traduzida do termo em inglês “Continuous Integration”, ou CI) exerce o papel fundamental de garantir que cada componente funciona perfeitamente (tanto individualmente, como quando integrado), rodando as automações com alta frequência, seja uma vez ao dia ou de hora em hora.
Na prática, os desenvolvedores constroem e testam o código localmente antes de enviar o que foi desenvolvido para o repositório e, uma vez que essas alterações chegam ao repositório, é iniciada automaticamente uma sequência de etapas.
A primeira etapa, mais comum, é a construção do código mais recente do código-fonte. Se tudo correr bem, são iniciados os testes unitários. Se correrem bem, é iniciado o build para os ambientes de testes e, no final de cada etapa, é gerado um relatório detalhado com o status do processo, exibindo o número de compilações feitas, defeitos que possam ter ocorrido e o total de testes realizados.
Para exemplificar melhor este flow, um pipeline de CI executa as seguintes tarefas:
A Entrega Contínua (tradução de “Continuous Delivery”, ou CD), é uma sequência do que ocorreu na etapa de CI. Ambas se conectam, porque enquanto a CI trata da construção e dos testes, a CD trata de como implementar todos esses pacotes.
Antes da implementação de uma nova funcionalidade, a Continuous Delivery contempla um flow que inclui testes automatizados, unitários, testes de API e testes de carga e integração. Cada etapa é realizada de forma automática, garantindo testes automatizados a nível unitário, de integração e sistêmico. Como os testes podem falhar em qualquer nível e ambiente, o CI/CD deve garantir uma forma de relatar rapidamente as falhas aos desenvolvedores.
Dependendo das políticas e dos processos definidos pelas equipes, os desenvolvedores podem seguir estes passos:
É a fase em que se garante a qualidade na entrega com o mínimo de erros possível.
O objetivo é promover a atualização ou o lançamento somente quando passar nos testes de requisitos funcionais, permanecer estável e livre de defeitos. Normalmente, é um processo automatizado totalmente integrado no pipeline.
É bem mais fácil resolver e corrigir problemas enquanto eles ainda estão na base. Este tipo de ação impede que os códigos se multipliquem sobre uma base instável, o que acaba por reduzir o tempo e esforço na resolução de eventuais erros.
Atualmente, as ferramentas de teste automatizado têm total aderência com as ferramentas de CI/CD, permitindo que os dados de teste sejam alimentados diretamente no pipeline. Dependendo da ferramenta utilizada, podemos definir se seguiremos para a próxima etapa de teste com base nos resultados dos testes anteriores, garantindo que a cada etapa a equipe receba um report com os resultados informando o step seguinte.
Para garantir maior eficiência no pipeline, é recomendável montar a suíte de testes colocando os mais rápidos à frente dos mais complexos – assim pode ganhar-se mais tempo nas entregas.
Traçando estratégias na criação dos testes, temos de ter em mente a estrutura da pirâmide de testes, onde equilibramos os testes unitários, os de integração e os end-to-end.
Essa abordagem bem estruturada para testes de CI/CD garante uma cobertura abrangente, mantendo a eficiência e a eficácia durante todo o ciclo de vida de desenvolvimento de software.
Existem diversas ferramentas que permitem a utilização e práticas de testes em CI/CD, mas as mais populares são:
Quando falamos de testes CI/CD, todo o tipo de teste é válido, tanto manual, quanto automático. O facto é que o teste manual exige que o QA (Quality Assurance) tenha uma perceção apurada e veja diferentes formas de testar uma aplicação, garantindo a harmonia entre critérios simples como funcionalidade, usabilidade, acessibilidade e performance.
No entanto, em situações em que seja necessário testar um número elevado de cenários, o que acaba por aumentar as chances de erro humano decorrente da perda de atenção nos testes ou no próprio controle, isso pode vir a ser um fator que aumenta o tempo dos testes. Daí a importância de testes automatizados, pois podemos alimentar casos de testes repetitivos e complexos, economizando o tempo dos QA.
Os testes automatizados aceleram os ciclos de feedback ao verificar continuamente o código. É importante automatizar o máximo possível o processo de teste. Essa abordagem é adequada para executar grandes conjuntos de testes repetitivos e detetar regressões prontamente. Os tipos de testes que podem ser integrados como parte dos ciclos CI/CD são testes de unidade, testes de integração, testes de sistema e testes de regressão.
Como nem todos os casos de teste podem ser automatizados, é sempre recomendado uma abordagem que combine testes manuais e automatizados para garantir a entrega contínua.
Ao implementarmos pipelines de testes no fluxo de CI/CD, garantimos uma maior assertividade nos testes, pois reduzimos os tempos regressivos, garantimos uma maior qualidade do software e ganhamos tempo na resolução de bugs.
Otimizando estas etapas, abrimos mais espaço para que as equipes explorem a criatividade, trazendo insights acerca do produto e permitindo que os indivíduos tragam mais inovações.
Eis alguns dos principais benefícios da aplicação dos conceitos de CI/CD ao desenvolvimento de um produto de software:
Bom, chegámos à conclusão de que com pipelines de testes bem definidos, o time consegue desempenhar um papel fundamental para garantir uma entrega eficiente e com qualidade.
CI/CD são duas práticas recomendadas de DevOps, pois abordam o desalinhamento entre os desenvolvedores e a equipe operacional. Com a presença da automação, os desenvolvedores podem lançar alterações e novos recursos com mais frequência, enquanto as equipes de operação têm melhor estabilidade geral.