Necessidade do cliente
Com o grande crescimento da empresa em uma velocidade muito rápida, as áreas de TI e de negócios precisaram acelerar a subida de novos projetos para produção e integração com os sistemas TOTVS.
Antes do projeto, o processo de gerenciamento de código não era centralizado e o deploy era feito manualmente nos servidores. Onde, durante a janela, os analistas executavam um backup dos arquivos atuais no próprio servidor e copiavam manualmente os arquivos para as pastas de destino.
Arquitetura da solução
Como o gerenciamento de código estava distribuído entre fábricas de software parceiras e o time de sustentação do ambiente, primeiramente foi feita a centralização de todos os códigos legados e um novo repositório seguindo o padrão de nomenclatura dos outros projetos com o nome "Camil.TOTVS.Especificos" definindo o git flow como padrão de desenvolvimento, permitindo que diferentes times pudessem trabalhar nos mesmos repositórios de código. A Camil já fazia uso das ferramentas de CI/CD contempladas no Azure DevOps para outras finalidades, então essa foi a ferramenta escolhida para o projeto.
Criamos uma estrutura de build das aplicações com testes unitários utilizando o SonarQube, garantindo assim a qualidade do código gerado e mitigando a subida de erros nos ambientes. Também foram configuradas algumas regras como a interrupção da compilação caso a branch que esteja tentando fazer o merge esteja com commits atrás da versão que está na master, para garantir que nenhuma alteração seja sobrescrita por engano, como era usual no fluxo antigo.
No processo de deploy foi criado um stage de rollback de maneira que podemos restabelecer o ambiente em segundos onde no processo anterior era feito em horas, pois era necessário primeiro encontrar a versão antiga do código, compilar os programas novamente e fazer um novo deploy desses artefatos.
Outra solução proposta e implantada, foi a criação de ambientes de desenvolvimento efêmeros para cada time de projetos, baseados em AMIs "Golden Images" e automação com Terraform, onde foi possível entregar um novo ambiente atualizado e limpo para o início de um projeto mais rapidamente e automaticamente, desonerando o time de infraestrutura nessas entregas através de infraestrutura como código e também restringindo os acessos nos ambientes garantindo assim maior segurança.
Resultados
Com a centralização dos códigos, a padronização e automatização dos pipelines de build e deploy, os times de desenvolvimentos ganharam mais autonomia para subir o código nos ambiente de desenvolvimento e qualidade, garantindo assim uma maior velocidade de entrega: o que antes levava dias para a subida dos códigos, agora leva minutos.
Esse processo de projetos foi aliado a metodologias ágeis já utilizadas em outras frentes pela Camil, garantindo uma melhor governança de alterações pois todo o código está centralizado e todas as alterações são registradas no git, facilitando o processo de rollback em caso de falhas, diminuindo o MTTR (Mean time to repair) nesses casos de horas/dias para minutos.
Outra melhoria obtida com a implantação do DevOps, foi a velocidade de entrega de ambientes para os diversos times de desenvolvimento. Com as AMIs "Golden Images" e a utilização de um pipeline de IaC para a subida de ambientes das aplicações hospedados em AWS EC2 e AWS Load Balancer, a disponibilização de novos recursos para cada squad que antes demorava semanas agora é feita em algumas horas, com a aprovação dos gestores e melhor controle de custos e segurança com security groups e acessos IAM controlados para cada time.