Continuous Integration e Continuous Deployment - A minha aventura com CI/CD

 No último post que publiquei da amizade que fiz com o ChatGPT, falei-vos por alto de CI/CD e hoje decidi escrever mais um post contando um pouco mais da minha aventura realizada no meu estágio da universidade e falando das minhas experiências.

Não vou dizer em qual empresa foi porque para o contexto não interessa muito, mas vou contar a história de como aprendi CI/CD e em que contexto utilizei. Primeiro, vou dar uma descrição sucinta do negócio. Tratava-se de uma plataforma online na área da certificação energética das casas. O negócio começa com o cliente que se regista na plataforma e regista as suas propriedades. O cliente pede uma recolha para a propriedade pagando uma quantia pelo serviço e agenda essa recolha com um inspetor. O inspetor aceita a recolha e depois faz a recolha na casa da pessoa retirando os dados necessários para a recolha através de uma aplicação móvel da tal empresa e de seguida envia os dados para o servidor que vai gerar a etiqueta energética sendo revista por um especialista técnico que aprova ou reprova a recolha. Sem dizer qual era a empresa descrevi-vos o negócio em que surgiu o CI/CD.

O objetivo do meu estágio foi implementar novas funcionalidades no servidor de backend e melhorar funcionalidades existentes, melhorar a documentação e implementar o procedimento de CI/CD.

Então o que é o CI/CD ?

Continuous Integration e Continuous Deployment, vulgo CI/CD, é uma metodologia que pode ser utilizada para garantir a qualidade de código através de testes automatizados de integração e testes unitários(ver mais em CI/CD | O que é CI/CD? (redhat.com).  Isto permite agilizar o processo de entrega das funcionalidades ao cliente.

CI/CD funciona através de um repositório Git em que quando é dado push para o repositório remoto é gerado uma espécie de evento que vai chamar um servidor remoto que vai realizar um conjunto de testes à vossa aplicação ou API. Depois desses testes pode ser chamado funções que vão carregar as novas funcionalidades para o vosso servidor.

Aqui podem ver um esquema do funcionamento do CI/CD:


Depois de introduzido o conceito, falarei agora como conheci esta metodologia.

Inicialmente propuseram-me criar um servidor de CI/CD manualmente. Ou seja teria de desenvolver uma API que estivesse à escuta de eventos remotos como por exemplo pull requests e que executasse uma série de comandos de compilação e teste e retornasse status 1 se desse certo ou 0 se desse errado. Como falei no último post, utilizei como ferramenta o VirtualBox ou VMWare para desenvolver o meu trabalho de estágio. O objetivo era clonar a máquina virtual de desenvolvimento e realizar os testes nessa nova máquina. Ou seja essa API teria de estar nessa máquina e o fornecedor de repositórios remotos(GitHub, GitLab, BitBucket) teria de ter acesso a essa máquina que ia realizar um POST para essa máquina e realizaria esses testes. Como o tempo era curto, conheci o CircleCI que me facilitou o processo.

O CircleCI é um serviço na cloud que orquestra o CI/CD.

A primeira coisa que tive que fazer foi criar o tal Docker que vos falei no post passado e que acabou por se descartado.
Como os requisitos eram muito específicos e tinha de trabalhar com Windows Server 2019, realizei um trabalho de investigação na documentação do CircleCI e conheci umas bibliotecas que o CircleCI tinha para trabalhar com Windows(ver CircleCI Developer Hub - circleci/windows)
A configuração do CircleCI funciona através da sintaxe YAML através de tabulações por espaços.
A primeira coisa que tive de fazer foi instalar as dependências necessárias, como a base de dados local (base de dados da maquina CircleCI) o Node.js e outras dependências necessárias.
Depois do primeiro objetivo feito, integrei todos os testes que estavam escritos no CircleCI um de cada vez.

Vou vos mostrar um repositório meu que tenho andado a desenvolver em que integrei o CircleCI:



Tenho estado a desenvolver utilizando conceitos de SOLID uma API de lista de tarefas e aproveitei para integrar o CircleCI.
E tiveste que pagar alguma coisa para isso ?- perguntam vocês.
No CircleCI, projetos open source públicos que utilizem o sistema Linux têm direito a um certo número de créditos gratuitos por mês.

Além do CircleCI, existe ainda outras soluções de CI/CD tal como o Jenkins, o TeamCity da Jetbrains o Buddy e entre outros.

Em suma, CI/CD permite garantir a qualidade do código produzido e melhorar a eficiência da entrega das funcionalidades desenvolvidas.