O documento discute as mudanças implementadas na Revelo para padronizar e simplificar o processo de configuração e inicialização do ambiente de desenvolvimento entre as equipes. A ferramenta revelo-cli foi criada para automatizar a instalação de dependências, clonar repositórios, criar containers Docker e bancos de dados de forma centralizada e consistente através de um único comando. Isso melhorou significativamente a agilidade e a manutenção dos mais de 20 serviços em desenvolvimento.
6. 6
Ambiente
heterogêneos
Script de criação do
ambiente
Scripts de setup permitiram gerar um processo
único de setup. Scripts eram normalmente em
shell e ruby.
Docker &
docker-compose
Docker permitiu padronizar e isolar
cada sistema. Docker-compose
permitiu centralizarmos as
dependências entre sistemas e
variáveis de ambiente.
Readme
Instruções de criação do ambiente e
instruções para rodar deveriam estar no
readme do projeto. Criamos alguns readme
exemplares para serem seguidos.
7. 7
Forma única de inicialização e centralização de configurações de pastas e
variáveis.Único docker-compose
+ 20 serviços e crescendo
Centralizar o orquestramento permitiu eficiência e agilidade na criação e
manutenção dos serviços. Deixou pontos da infraestrutura explícitos e
padronizados entre os times.
Novo repositório
Reutilização de recursos e padronização entre ambientes de dev, staging e
produção.Documentação
9. 9
Onboarding
./install
Uma única vez para instalar a ferramenta.
Processo de instalação de dependências do
sistema operacional e ferramentas.
revelo-cli setup
Uma única vez por serviço. Processo de
criação do ambiente por serviço.
Nesse processo contempla: clone do
repositório, criação/download do
container, download/criação do(s)
banco(s) de dados
revelo-cli docker up
Rodar sempre que for subir um novo serviço.
Processo para iniciar um ou mais serviços e
suas dependências.
10. 10
Novo dominio: dev.revelo.io
Subdominios padronizado: servico.produto.dominio-do-ambienteDomínios
Ambientes diferentes de prod
A aplicação principal precisava de um proxy para funcionar ou durante a
navegação precisava mudar a url manualmente.Proxy
13. 13
Ambiente seletivo
Setup/Inicialização
seletiva
Setup baseado na seleção de
serviços e inicialização
baseado na seleção de
serviços.
Configuração pessoal
Dentro do processo de setup,
contempla: o setup do
ambiente, seleção dos
serviços e inserção das
credenciais necessárias
Local <> Container
Utilização do
host.docker.internal como
padrão, permitindo o uso
dentro e fora do docker.
14. 14
Processo integrado com o shell, permitindo o autocomplete e busca de
comandos.autocomplete
Ambientes desatualizados
Processo de detecção de atualizações do revelo-cli e notificação de serviço
desatualizado.autoupdate
15. 15
Docker para o mac
Tipos de volumes
O MAC tem um conflito com o formato que o docker utiliza para
gerenciamento de arquivos. Para resolver isso existe uma
conversão para cada alteração de arquivo e isso gera um
problema de performance.
Tamanho das imagens
As imagens do docker estavam crescendo e ficando cada vez
maiores, realizamos uma limpeza nas dependências e
aumentamos a utilização de alpine quando possível.
Reutilização de volumes
Volumes que podem ser compartilhados, como por exemplo
pasta do bundle, reduz o tamanho total dos volumes e aumenta
a velocidade de inicialização das aplicações.
Instalação inteligente
Criamos um processo de instalação para mac e linux com a
mesma interface. Sendo possível criar um processo para
windows se necessário.
17. 17
Nova realidade
git clone git@github.com:revelo-cli.git
cd revelo-cli
./install
./revelo-cli setup
./revelo-cli docker up
ruby
docker
heroku
docker-compose
bundle
revelo_cli
repositories
docker
import_database
elasticsearch
rabbitmq
18. 18
Propagação de processos
Ganhamos uma forma fácil e auditável de propagar processos/scripts entre os times. Geradores de código, templates, scripts de
setup tem um lugar para morar agora.
Infrastructure as Code (IaC)
Agora com o ambiente documentado e replicável, podemos seguir para o próximo nível de complexidade e colocarmos
infraestrutura como código. Podemos agora com facilidade migrar para kubernetes ou qualquer outra ferramenta que tenhamos
interesse.
Nova realidade
Ambiente pronto
Ambiente pronto para uso, permitindo que o foco vá para o que realmente importa que é o produto. Mas ao mesmo tempo permite
que possamos evoluir a infra e facilita mudanças.