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.
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.
Endpoint: https://desafio-2-devops.onrender.com/users.
Método: POST
Formato de body:
{
"name": "Test",
"email": "test@gmail.com",
"password": "test"
}
GitHub | GitHubActions | Render | Postgree | Docker