+55 11 3995-6919 / +55 11 3900-1010

Processos CI/CD

Processo de Integração e Deploy Contínuo (CI/CD) na AWS – Parte 1

Antes de introduzir o assunto de CI/CD, precisamos entender um conceito que vem ganhando grande força no mundo da tecnologia: o DevOps. Esse termo é bem sugestivo pois se deriva da junção das palavras “desenvolvimento” (em inglês, development) e “operações” (em inglês, operations). Essa palavra descreve um conjunto de práticas para integração entre as duas equipes. Entretanto, há a possibilidade de incorporação de outros setores. Como por exemplo, o de controle de qualidade, permitindo adotar processos automatizados para um desenvolvimento rápido e seguro de aplicações e serviços.
Também não podemos deixar de falar de Pipeline, uma vez que esses assuntos estão diretamente ligados. Na tradução literal, pipeline, traz o conceito aplicado a gasodutos e encanamentos. Na área de TI, esse termo vem se mostrando cada vez mais atual e utilizado. Seu objetivo, é automatizar o processo de entrega de um software. Usando publicações e correções em uma aplicação de forma contínua. E assim, garantindo a qualidade na entrega final deste processo.

Vantagens de se utilizar pipeline:

  • Automatização benéfica, agilizando o processo e evitando erros humanos; (Quanto menos erros, a entrega será mais rápida)
  • Fácil integração de pequenas atualizações;
  • Como os desenvolvedores não se preocupam em entregar o código até produção, eles conseguem ficar mais focados na configuração de novas features;
  • Possibilidade de realizar atualizações de código pequenas, frequentes e reversíveis.
  • Concentração de logs de teste, atualizações e deploys ficam acessíveis para verificação a qualquer momento;
  • Bugs são identificamos de forma mais rápida, agilizando as correções.
  • CI – Continuous Integration

    Bom, a definição básica de integração contínua (CI) é a prática de automatizar a integração de alterações individuais de código, chamadas de branches, de vários colaboradores em um único projeto de software através do merge de diversos branches em um código consolidado. O processo de CI é composto por ferramentas automáticas que apontam, a correção do novo código antes da integração.
    Temos exemplos de ferramentas de repositórios de cógido com esse recurso, o GitHub, BitBucket, GitLab entre outros. Vale lembrar que na AWS temos o serviço do CodeCommit, que é extremamente funcional e de uso parecido dessas ferramentas mais famosas, visto que ele hospeda repositórios baseados em Git. Caso queira ter mais informações sobre este serviço, clique aqui.

    CD – Continuous Deployment/ Continuous Delivery

    Há dois conceitos ligados a sigla CD. Mas seu principal objetivo é a prática de desenvolvimento de software em que as alterações de código são criadas, testadas e preparadas automaticamente para a liberação em um ambiente de produção. Ele expande a integração contínua. Implementando todas as alterações de código. Seja em um ambiente de teste, ambiente de produção ou em ambos. Após a conclusão do estágio de construção. Quando a liberação deste deploy é feita de forma de aprovação. Ou seja, é necessária uma intervenção humana para a esteira ser finalizada, temos o conceito de Continuous Delivery. Já quando este processo é totalmente automatizado, com todos os testes funcionando, sem a autorização explícita humana, temos o conceito de Continuous Deployment. Algumas das ferramentas mais famosas para este processo temos o Jenkins. Ele utilizado em todo o mundo, devido a sua grande comunidade e infinidade de plugins, garantindo inúmeras integrações.
    Na AWS, temos o AWS CodePipeline. Ele nos ajuda nessa integração. Na plataforma, temos serviços como o CodeBuild, para você compilar sua aplicação. E o CodeDeploy para realizar os deployments em seus recursos necessários para seu software. Para entender melhor sobre o AWS CodePipeline, clique aqui.

    Em uma estrutura padrão de CI/CD, temos a seguinte estrutura de funcionamento:

    AWS Code Pipeline

  • Source: O local onde está o código da aplicação;
  • Build: Momento em que é efetuado um merge do código já existente com o código de atualização. Aqui também pode ser efetuado a compilação da sua aplicação. Gerando toda estrutura;
  • Test: Este passo é um dos essenciais para garantir uma entrega rápida e segura. Aqui são efetuados testes automatizados para garantir o pleno funcionamento da aplicação.
  • Staging: Após os passos acima ocorrerem perfeitamente, a aplicação é enviada para um ambiente de staging, mais próximo a realidade em que sua aplicação irá funcionar. Nele são realizados testes adicionais de funcionamento da aplicação e infraestrutura antes de ir definitivamente para o ambiente de produção.
  • Production: Finalizando a pipeline, temos o ambiente de produção, após ter sido devidamente testado e atualizado com os processos anteriores, além de depender do nível de maturidade dos seus testes, essa nova versão lançada está funcionando perfeitamente e foi atualizada de forma automática. Finalizando o CI/CD.
  • Deploy Automatizado

    Vamos agora criar na prática um exemplo de deploy automatizado simples na AWS juntamente com seu GitHub, uma das plataformas de versionamento de código mais utilizadas no mundo , para que você veja as várias maneiras de possíveis integrações na AWS. Para isso, foi realizado a seguinte arquitetura:

    Na ilustração acima, os desenvolvedores fazem o “push” da aplicação para o Github. Neste momento, juntamente configurado com o AWS CodePipeline, o Git dispara um webhook toda vez que ocorre uma alteração de código. Assim o CodePipeline gera um Artefato da aplicação, manda para um bucket S3 e aciona o CodeDeploy para finalizar o deploy automático em uma Instância EC2. Lembrando que, como fizemos um método simples de deploy, não temos um passo de build ou test, esta ilustração serve apenas para que você veja a configuração de um continuous deployment de maneira fácil.
    Na parte 2 traremos um tutorial de como realizar esta arquitetura na sua rede AWS.

    01 comments