DO ‐ Deploy Automático - manolito-fatec/dashflow-2025-1 GitHub Wiki
Deploy Automático no Projeto
Visão Geral
O Deploy Automático no projeto tem o objetivo de automatizar a disponibilização da aplicação em um ambiente de produção. Utilizamos o GitHub Actions para realizar esse processo no back-end e no front-end.
Somente os merges realizados da branch ‘develop’ para 'main' disparam uma pipeline de build, geração do arquivo/diretório final e então o envio para o ambiente de produção. O ambiente de produção , quando devidamente configurado, automaticamente realiza a disponibilização do back-end e front-end para o usuário final.
Configuração do CI no GitHub Actions
Estrutura do CI
O pipeline de CI é dividido em dois fluxos principais:
Backend: Compilação do projeto Java e geração de um artefato .WAR, utilizando Maven , e então o envio desse artefato para a VM especificada.
Frontend: Construção do projeto Vue.js, configurando Node.js 22 para gerar as pastas de produção ‘/dist’ e então o envio do conteúdo dessa pasta para a VM especificada.
Ambos os workflows são disparados automaticamente ao realizar um merge da develop para a main em cada um dos repositórios separadamente.
Configurações da VM
A VM (ambiente de produção) deve ser previamente configurada para receber o client e o server da aplicação.
O servidor deve estar devidamente configurado com o Apache Tomcat ,Postgresql e JDK 17.
Build and Deploy do Backend
Configuração do Workflow
name: Java Build and Deploy
on:
push:
branches:
[main]
jobs:
build:
runs-on: ubuntu-latest
services:
postgres:
image: postgres:latest
env:
POSTGRES_USER: ${{ secrets.DB_USERNAME }}
POSTGRES_PASSWORD: ${{ secrets.DB_PASSWORD }}
POSTGRES_DB: dashflow
ports:
- 5432:5432
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
cache: maven
- name: Build with Maven
run: mvn -B clean package -f pom.xml
env:
SPRING_DATASOURCE_URL: jdbc:postgresql://localhost:5432/dashflow
SPRING_DATASOURCE_USERNAME: ${{ secrets.DB_USERNAME }}
SPRING_DATASOURCE_PASSWORD: ${{ secrets.DB_PASSWORD }}
- name: Find WAR file
id: find-war
run: |
WAR_FILE=$(ls target/*.war | head -n 1)
echo "WAR_FILE=${WAR_FILE}" >> $GITHUB_OUTPUT
echo "WAR_FILENAME=$(basename ${WAR_FILE})" >> $GITHUB_OUTPUT
- name: Deploy to ManoLitoVM
uses: appleboy/scp-action@master
with:
host: ${{ secrets.MANOLITO_VM_IP }}
username: ${{ secrets.MANOLITO_VM_USR }}
password: ${{ secrets.MANOLITO_VM_PSW }}
source: "target/*.war"
target: "/opt/tomcat/webapps"
strip_components: 1
Explicação dos Passos
Checkout do código: Baixa os arquivos do repositório.
Configuração do JDK 17: Instalação da versão correta do Java.
Configuração do Apache Spark: Instalação do Spark para o processamento distribuído.
Build com Maven: Compila o projeto e gera um artefato .WAR, com as libs e configurações declaradas no pom.xml.
Mover os arquivos para a VM: Envia o artefato .WAR para a VM, no caminho ‘/opt/tomcat/webapps’
Build e Deploy do Frontend
Configuração do Workflow
name: Vue.js Deploy
on:
push:
branches:
'[main]'
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Node.js 22
uses: actions/setup-node@v4
with:
node-version: '22'
cache: 'npm'
- name: Install dependencies
run: npm install
- name: Build project
run: npm run build
- name: Run Test ViTest
run: npm run test
- name: Deploy to ManoLitoVM
uses: appleboy/scp-action@master
with:
host: ${{ secrets.MANOLITO_VM_IP }}
username: ${{ secrets.MANOLITO_VM_USR }}
password: ${{ secrets.MANOLITO_VM_PSW }}
source: "dist/*"
target: "/opt/tomcat/webapps/web-client/"
strip_components: 1
Explicação dos Passos
Checkout do código: Baixa os arquivos do repositório.
Configuração do Node.js: Instala a versão 22 do Node.js e usa cache do npm.
Instalação de dependências: Executa npm install para baixar os pacotes do projeto.
Build do projeto: Executa npm run build para gerar os arquivos estáticos no diretório ‘dist/’.
Mover arquivos para a VM: Envia o conteúdo do diretório ‘dist’ para o caminho designado na VM.
Elementos de possível melhora do CI
Implementação de Testes de Integração com Cypress; Implementação de Deploy no Tomcat 10 ou 11.
Resultados
Deploy Automatizado: Cada merge na main é deployado no ambiente.
Fácil implantação em VM's configuradas: O deploy facilitará a possível disponibilização em várias VM's previamente configuradas.