Pular para o conteúdo principal

O que é um pipeline de CI/CD?

As empresas são pressionadas a lidar com atualizações de software, correções de bugs e inovações em um mercado de aplicações cada vez mais competitivo. As equipes de software e operações devem trabalhar de forma coesa para lidar com o feedback dos usuários, resolver problemas e implantar atualizações sem comprometer as operações comerciais. Os ciclos convencionais de desenvolvimento de software, particularmente aqueles baseados no modelo em cascata sequencial, têm dificuldade para acompanhar o ritmo da entrega de software moderno. À medida que o ciclo de vida de desenvolvimento de software se torna mais compacto, as equipes de desenvolvimento recorrem ao CI/CD para criar códigos precisos, de alta qualidade e mais seguros com eficiência.

CI/CD significa integração contínua e entrega contínua. Em alguns casos, CD também pode significar implantação contínua.

  • A integração contínua permite que vários desenvolvedores trabalhem e mesclem seu código simultaneamente sem comprometer a estabilidade do código.
  • A entrega contínua é um fluxo de trabalho automatizado para testar, validar e preparar o software para lançamento mediante aprovação humana.
  • A implantação contínua é semelhante à entrega contínua, exceto que a aprovação é automatizada por meio de regras pré-configuradas.

Juntos, o CI/CD pode ser implementado como um pipeline que automatiza todos os processos que antes eram realizados manualmente. Para entender melhor como o pipeline de CI/CD funciona, consulte o diagrama abaixo.

Cada etapa no pipeline de CI/CD compreende atividades específicas no processo de desenvolvimento de software. Elas compreendem testes automatizados para verificar a qualidade, vulnerabilidades e outros problemas técnicos do código antes que as compilações de software sejam propagadas. Dessa forma, as equipes de desenvolvimento podem identificar e corrigir problemas de código na fase inicial, o que economiza tempo, recursos e custos significativos para as empresas.

Configurar um pipeline de CI/CD parece simples. No entanto, as empresas geralmente enfrentam desafios ao implementar o fluxo de trabalho de CI/CD, especialmente com uma configuração on-premises. Por exemplo, as empresas enfrentam gargalos de infraestrutura quando precisam gerenciar um número maior de aplicações, ferramentas e membros da equipe. Se não forem resolvidos, os desenvolvedores passam mais tempo corrigindo o pipeline em vez de trabalhar no código em si.

A mudança dos fluxos de trabalho de CI/CD para a Nuvem AWS permite que as equipes escalem workloads modernas de desenvolvimento de software, comuniquem as mudanças com mais eficiência e gerenciem os recursos de forma mais eficaz. Por exemplo, a Duolingo migrou seu pipeline de CI/CD para o AWS EC2 Mac e implementou estratégias avançadas de escalabilidade automática. Como resultado, ela reduziu o tempo de compilação de 50 minutos para apenas 16 minutos.

Como você pode estabelecer um pipeline de CI/CD?

A AWS torna a implementação de CI/CD mais fácil, automatizada e segura com serviços gerenciados e automatizados. Em vez de provisionar manualmente ferramentas de desenvolvimento, servidores e recursos, sua equipe pode se concentrar em atividades de alto valor, como responder às solicitações dos usuários e criar estratégias para o processo de lançamento de software.

Para começar, você pode usar o AWS CloudFormation para implantar automaticamente recursos de nuvem, de que as equipes de DevOps precisam para configurar um pipeline de CI/CD. Você começa descrevendo os recursos necessários no modelo ou usando modelos pré-criados. Em seguida, o CloudFormation provisiona os recursos que, juntos, formam o ambiente fundamental que dá suporte à CI/CD. Em seguida, você pode implementar as etapas do pipeline de CI/CD na Nuvem AWS da seguinte forma:

Origem

A etapa do código fonte rastreia as alterações de versão que os desenvolvedores fazem. Os desenvolvedores copiam uma versão do código original do repositório central compartilhado para sua máquina local. Em seguida, eles editam, compilam, testam e mesclam o código modificado com o repositório.

Veja como sua equipe pode fazer e gerenciar alterações de código com as ferramentas da AWS.

Etapa 1: criar códigos com o IDE

Um desenvolvedor pode criar um novo código ou editar o código existente com o AWS Cloud9, um ambiente de desenvolvimento integrado (IDE) baseado em nuvem compatível com linguagens de programação conhecidas. Com o Cloud9, você pode escrever, executar e depurar o código-fonte em um navegador da web, desde que tenha acesso à internet. Como alternativa, se você instalar um IDE de terceiros, poderá baixar kits de desenvolvimento de software (SDKs) para permitir a escrita de código em várias linguagens, incluindo Java, Python e JavaScript. Os SDKs permitem que você acesse recursos e bibliotecas da AWS por meio da interface de programação de aplicações (API) do seu ambiente de codificação preferencial.

Etapa 2: enviar o código para o repositório central

Os desenvolvedores utilizam ferramentas de terceiros, como o GitHub, para criar repositórios de código privados, gerenciar pull requests e mesclar alterações. Ele atua como um sistema de controle de versão, que permite rastrear as alterações que outros desenvolvedores fizeram e reverter para um código-fonte funcional anterior, se necessário.

Compilação e teste

Na etapa de compilação, o código armazenado no repositório central é enviado para um servidor de compilação. Em seguida, o servidor de compilação transforma o código-fonte e as dependências em um arquivo de software chamado artefato, que os desenvolvedores podem executar nas etapas subsequentes. Por exemplo, se você estiver compilando um programa Java, receberá um arquivo JAR ou WAR. Vários testes preliminares podem ser realizados nessa etapa, incluindo análise de código estático e unitário.

  • Os testes unitários garantem que as funções individuais do software produzam os resultados corretos. 
  • A análise estática de código verifica o código-fonte para identificar bugs, vulnerabilidades de segurança e aderência aos padrões de codificação.

Se o código falhar em algum teste, os desenvolvedores o reverterão para o estado anterior e resolverão os problemas.

Tradicionalmente, as equipes de software precisam configurar seus próprios servidores de compilação para empacotar suas aplicações. Além disso, elas precisarão escrever manualmente scripts de teste, validá-los e monitorar os resultados por meio de repetidas iterações. Agora, elas podem usar o AWS CodeBuild para acelerar o fluxo de trabalho de criação de CI/CD. Ele permite que sua equipe automatize as compilações e teste o software à medida que faz alterações. Ele localiza o código-fonte do repositório especificado e executa o script de compilação que você configurou.

O AWS CodeBuild escala automaticamente sua capacidade computacional para corresponder às suas workloads de compilação. Dessa forma, você não precisa esperar que as compilações anteriores sejam concluídas antes de iniciar uma nova. As equipes de software podem identificar problemas de código logo no início e resolvê-los antes que se tornem complexos.

Por exemplo, se você estiver compilando um projeto Node.js, poderá integrar o framework de testes Jasmine ou Jest com o AWS CodeBuild. Esses frameworks permitem que você escreva facilmente casos de teste, especifique os resultados esperados e os valide durante as execuções de compilação. 

A etapa de teste ocorre imediatamente após a compilação. Ela foi projetada para submeter a aplicação a testes mais rigorosos, permitindo que as equipes de software aprimorem a qualidade, a performance, a segurança e outros aspectos importantes do código. Com um pipeline de CI/CD, o teste é automatizado e se estende para várias áreas.

  • Os testes de integração garantem que todos os serviços e componentes de terceiros usados pela aplicação estejam interagindo corretamente entre si.
  • Os testes funcionais fornecem uma avaliação abrangente da aplicação do ponto de vista do usuário final.
  • Os testes de segurança investigam a aplicação em busca de possíveis riscos e vulnerabilidades de segurança.
  • Os testes de performance garantem que a aplicação permaneça responsiva e funcional em caso de condições extremas ou inesperadas, como um pico repentino de tráfego.

Novamente, a aplicação deve passar por todos os testes especificados antes de ser movido para a próxima etapa.

Preparação

A preparação permite que você realize as verificações finais na aplicação antes de liberá-la para os usuários finais. Nessa etapa, as equipes de software implantam a aplicação em um ambiente que imita as implementações do mundo real. Geralmente, elas usam dados simulados e cadastram um grupo de usuários finais para testar a aplicação com o objetivo de detectar problemas não detectados antes do lançamento.

Por exemplo, você atualizou uma aplicação e quer verificar como ela se comporta com as interações do usuário. Implantá-la no ambiente de teste ajuda você a avaliar a performance do software sem interromper as operações comerciais. Depois de cumprir todas as condições de teste, as equipes de software implantam a aplicação no ambiente de produção, o que a torna acessível aos usuários finais.

A implantação em vários ambientes pode ser desafiadora, principalmente se as equipes fizerem isso manualmente. O AWS CodeDeploy pode simplificar os esforços de implantação de aplicações. Ele automatiza a implantação de aplicações em vários ambientes. Você pode visualizar as atividades de implantação, acompanhar as alterações e reverter para uma versão anterior, se necessário. Ele também preenche a lacuna entre a preparação e a produção. Por exemplo, você pode usar as instruções de implantação exatas usadas para preparar uma versão de produção.

Produção

A produção é o ambiente ao vivo em que usuários reais acessam sua aplicação. Depois de modificar, testar e validar as alterações, as equipes de software lançam a aplicação atualizada no ambiente de produção. Embora a mudança marque o fim do pipeline de CI/CD, os esforços para garantir que a aplicação atenda aos requisitos de performance, segurança e negócios continuam. Portanto, você precisará monitorar continuamente a aplicação enquanto ela opera na produção.

O Amazon CloudWatch é um serviço que fornece visibilidade às equipes de desenvolvimento e operações sobre as aplicações que elas implantam na AWS, on-premises ou em outros ambientes de nuvem. Ele coleta e visualiza automaticamente os dados operacionais, permitindo que você entenda melhor a performance da sua aplicação em condições reais. Além disso, você pode definir alertas e receber notificações de eventos que exigem atenção imediata de suas equipes.  

Como você pode automatizar um pipeline de CI/CD?

Simplificar as ferramentas de CI/CD de diferentes fornecedores pode ser um desafio, especialmente se envolver configurações manuais extensas. No entanto, com o AWS CodePipeline, você pode automatizar, escalar e acelerar todo o processo de liberação de código, mantendo a flexibilidade.

O AWS CodePipeline permite que você modele um fluxo de trabalho de CI/CD com uma interface gráfica de usuário. Você pode integrar facilmente os serviços da AWS ao seu pipeline ou conectar às ferramentas e recursos existentes que você usa. Por exemplo, se quiser usar o Jenkins como um servidor de compilação, você pode integrá-lo ao AWS CodePipeline.

Confira abaixo as etapas para fazer isso.

  1. Instale o Jenkins e o plug-in do AWS CodePipeline para Jenkins.
  2. Em seguida, defina a permissão de acesso com o AWS Identity and Access Management (IAM) para Jenkins. Isso permite que o Jenkins use credenciais autorizadas para interagir com o AWS CodePipeline.
  3. Faça login no console do AWS CodePipeline e crie um pipeline personalizado.
  4. Conecte o pipeline a um repositório de código-fonte compartilhado, como o GitHub.
  5. Em seguida, adicione uma etapa de compilação e selecione Jenkins como servidor de compilação.
  6. Adicione todas as etapas de teste necessárias, incluindo as ações de teste necessárias e os acionadores de compilação.
  7. Depois, conecte a etapa de implantação ao AWS CodeDeploy ou a outro serviço de implantação. 

Como a AWS pode apoiar suas necessidades de pipeline de CI/CD?

Um pipeline de CI/CD permite que as empresas produzam, testem e disponibilizem atualizações de aplicações mais rapidamente, sem comprometer a qualidade e a segurança do software. As equipes de desenvolvimento de software modificam o código, mesclam as alterações, automatizam os testes, programam a implantação e muito mais com ferramentas automatizadas de CI/CD. No entanto, algumas equipes enfrentam desafios na escalabilidade dos fluxos de trabalho de CI/CD devido às limitações de infraestrutura, recursos e processos.

A AWS fornece um conjunto de soluções baseadas em nuvem para criar, simplificar e escalar seu pipeline de CI/CD.

  • O AWS CloudFormation provisiona recursos nos quais as ferramentas de CI/CD são executadas.
  • O AWS Cloud9 permite que os desenvolvedores escrevam, executem e depurem código de seus navegadores.
  • O AWS CodeBuild permite que você compile, teste e empacote sua aplicação sem gerenciar seus próprios servidores de compilação.
  • O AWS CodeDeploy automatiza a implantação em qualquer ambiente, incluindo instâncias on-premises e da AWS.
  • O AWS CodePipeline permite modelar todo o fluxo de trabalho de CI/CD, do código-fonte ao ambiente de produção ao vivo.
  • O AWS CloudWatch permite que as equipes operacionais monitorem, registrem e log e analisem continuamente as aplicações implantadas.

Se precisar de mais ajuda para configurar um pipeline de CI/CD, entre em contato com a Amazon Professional Services.