abreuraf / rs-ws-2020-env

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

RocketSeat Workshop 2020 - Ambiente containerizado

Nesse workshop vamos aprender a utilizar Docker e docker-compose para criar um ambiente de desenvolvimento containerizado.

Isso será feito com o objetivo de facilitar o desenvolvimento, testes automatizados e integração contínua de aplicações que dependem de serviços de infraestrutura externos - como bancos de dados e cache.

Vamos ver que com o uso dessas ferramentas ganharemos:

  • Não precisar instalar essas dependências em nosso ambiente local
  • Não precisar instalar essas dependências remotamente e disponibilizá-las na rede
  • Não precisar compartilhar essas dependências entre colaboradores
  • Não precisar se preocupar com o ciclo de vida dessas dependências (considerá-las efêmeras)

A aplicação

A aplicação consiste de uma API REST em Node.JS.

Essa API será um serviço que gerencia posts de texto do tipo tweet (inspirado no twitter):

  • Criação de um tweet que será identificado por um uuid versão 4
  • Acrescentar likes nos tweets cadastrados
  • Listar os top tweets com mais likes

O Workshop

O workshop será dividido nas seguintes etapas:

  1. Apresentação da aplicação

    • familiarização com o código fonte, arquitetura de software, testes
    • funcionalidades utilizam banco de dados em memória
  2. Adição de bancos de dados MongoDB

    • Como utilizar o docker-compose para "subir" o banco localmente (desenvolvimento local, testes automatizados)
      • utilizando rede virtual
      • expondo na máquina host
  3. Adição de serviço de cache Redis

    • Como utilizar o docker-compose para "subir" o serviço de cache localmente (desenvolvimento local, testes automatizados)
      • Utilizando rede virtual
      • expondo na máquina host
  4. Conectando a aplicação

    • Testes
    • Desenvolvimento
      • Como utilizar o docker-compose para "subir" a aplicação localmente conectando com os recursos
      • Expondo na máquina host
  5. Criar pipeline de CI com Github Actions

    • Com etapa de testes de integração
    • importante: o foco não é aprender github actions mas sim como utilizar containers pra facilitar o processo
  6. Considerações finais

  7. Q&A

Pré-requisitos

Disclaimer: O setup não foi testado em sistema operacional Windows então pode ser que não funcione. Recomendo a utilização de alguma distribuição Linux ou Mac.

Para conseguir acompanhar o workshop será necessário ter no ambiente

  • Docker e docker-compose
  • Git
  • Conta no Github
  • Última versão de Node.JS (14+)
    • recomendo a utilização do NVM
  • Preparar sua versão do repositório
    • fork desse repositório
    • git clone do repositório
    • executar no diretório do projeto
    # caso tenha optado pelo uso do nvm
    # (a versão de node vem do arquivo .nvmrc na raíz)
    nvm install
    nvm use
    
    # instalar as dependências
    npm install
    npm run postinstall
    
    # verificar:
    
    # executar testes unitários e de integração
    # como falta o mongodb e o redis, deve falhar com timeout de conexão
    npm test
    
    # tentar subir a aplicação localmente em modo debug
    # como falta o mongodb e o redis, deve falhar por erro de conexão
    npm run start:dev # gerará uma linha de log com "Application started successfully in port 3000"

Pós workshop

Código produzido

Todo código produzido nesse workshop está disponível no branch cheat-sheet.

Lição de casa

Durante o workshop, eu "expliquei" (nem sei se pode chamar disso) de forma bem grosseira o que é um container. Recomendo consultar a fonte pra saber de fato o que são e a tecnologia de fato por trás.

Além disso, a parte de networking foi explicada no modo "vamos acreditar que funciona" e foram utilizadas abordagens específicas. Recomendo a leitura da documentação oficial para esse assunto, tanto para entender os detalhes quanto para entender todo o leque de opções desse assunto vasto.

Exercícios

Disclaimer: originalmente o workshop tinha sido feito para que construíssemos features da aplicação ao mesmo tempo que integrassemos com containers. Primeiro implementaríamos as features de criação e adicionar likes e finalmente a de top com mais likes junto com seus respectivos testes. TL;DR: originalmente, produziríamos código de aplicação no workshop também.

Caso você queira mexer um pouco na aplicação, você pode implementar os seguintes exercícios:

1 . Criar testes que estão faltando

1.1 . Unitários para os componentes da funcionalidade adicionar likes

1.2 . De integração para a funcionalidade de adicionar likes

1.3 . De integração para a funcionalidade de top tweets com mais likes

2 . No pipeline de CI, testar com check de cobertura de código

3 . Criar Makefile para agrupar tarefas utilizando make

3.1 . Task test: cria infraestrutura + executa testes com check de cobertura + derruba a infraestrutura

3.2 . Task run: cria infraestrura + inicia a aplicação

3.3 . Modificar o pipeline de CI para utilizar a task test

About


Languages

Language:JavaScript 99.7%Language:Shell 0.3%