Skip to content

API deployment project, pipeline creation and docker configuration.

Notifications You must be signed in to change notification settings

queite/desafio-2-devops

 
 

Repository files navigation

DevOps

Este projeto é resultado do desafio DevOps da Potência Tech.

Com a disponibilização da API o desafio foi realizar o deploy, a criação de pipelines e a configuração do docker.

Descrição das implementações realizadas:

Configuração do docker-compose do banco de dados

Na raiz do projeto foi criado o arquivo docker-compose.yml que coloca o banco de dados em um container.

version: '3.9'

services:
db:
  image: postgres:latest
  container_name: prisma-docker-db
  restart: always
  ports:
    - "5432:5432"
  environment:
    POSTGRES_USER: prisma
    POSTGRES_PASSWORD: prisma
    POSTGRES_DB: prisma-db
  networks:
    - desafio-devops

Visto que o schema fornecido na API é do Prisma foi utilizada a imagem do Postgres.

Pipeline de teste end to end

Para o pipeline de teste end to end foi utilizado workflow do GitHub Actions.
Criado o arquivo run-e2e-tests.yml no caminho .github/workflows.

name: Run E2E Tests

on:
pull_request:
  branches:
    - main

jobs:
e2e-tests:
  runs-on: ubuntu-latest

  steps:
    - name: Checkout code
      uses: actions/checkout@v2

    - name: Set up Node.js
      uses: actions/setup-node@v2
      with:
        node-version: 18

    - name: Install dependencies
      run: npm ci

    - name: Start Docker Compose services
      run: docker-compose up -d

    - name: Wait for services to start
      run: sleep 10

    - name: Run E2E tests
      env:
        DATABASE_URL: ${{ secrets.DATABASE_URL }}
        NODE_ENV: ${{ secrets.NODE_ENV }}
        JWT_SECRET: ${{ secrets.JWT_SECRET }}
      run: npm run test:e2e

    - name: Stop Docker Compose services
      run: docker-compose down

Este workflow utiliza o GitHub Actions para, quando aberto Pull Request na branch main:

  • instalar as dependência do projeto
  • subir o container Docker do banco de dados
  • rodar os testes de integração
Pipeline de testes unitários

Para o pipeline de testes unitários foi utilizado workflow do GitHub Actions.
Criado o arquivo run-unit-tests.yml no caminho .github/workflows.

name: Run Unit Tests

on:
pull_request:
  branches:
    - main

jobs:
unit-tests:
  runs-on: ubuntu-latest

  steps:
    - name: Checkout code
      uses: actions/checkout@v2

    - name: Set up Node.js
      uses: actions/setup-node@v2
      with:
        node-version: 18

    - name: Install dependencies
      run: npm ci

    - name: Run unit tests
      run: npm run test

Este workflow utiliza o GitHub Actions para, quando aberto Pull Request na branch main:

  • instala as dependências
  • roda os testes unitários
Pipeline de deploy automatizado

Criado o arquivo deploy.yml no caminho .github/workflows.
O deploy foi realizado pelo Render.
Workflow do GitHub Actions:

name: Deploy to Render

on:
push:
  branches: [ main ]

jobs:
build-and-deploy:
  runs-on: ubuntu-latest

  steps:
    - name: Check out the repo
      uses: actions/checkout@v3

    - name: Deploy to production
      uses: JorgeLNJunior/render-deploy@v1.4.4
      with:
        api_key: ${{ secrets.RENDER_API_KEY }}
        service_id: ${{ secrets.SERVICE_ID }}
        wait_deploy: true

Este workflow utiliza o GitHub Actions para realizar deploy no Render quando houver qualquer modificação na branch main.

Quer testar?

Endpoint: https://desafio-2-devops.onrender.com/users.
Método: POST
Formato de body:

{
    "name": "Test",
    "email": "test@gmail.com",
    "password": "test"
}

Stacks

GitHub | GitHubActions | Render | Postgree | Docker

Releases

No releases published

Packages

No packages published

Languages

  • TypeScript 100.0%