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:
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:
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.