DO ‐ Integração Contínua (CI) - manolito-fatec/dashflow-2025-1 GitHub Wiki
Integração Contínua (CI) no Projeto
Visão Geral
A Integração Contínua (CI) no projeto tem como objetivo garantir que as alterações no código sejam automaticamente verificadas e construídas, reduzindo erros e melhorando a estabilidade do sistema. Utilizamos GitHub Actions para automatizar esse processo tanto no backend (Java Spring Boot + Spark) quanto no frontend (Vue.js 3).
Cada push ou pull request em qualquer branch dispara um pipeline de build para validar se o código pode ser compilado corretamente. Testes automatizados foram adicionados ao longo da primeira sprint.
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 utilizando Maven, configurando ambiente JDK 17 e Apache Spark.
- Frontend: Construção do projeto Vue.js, configurando Node.js 22.
Ambos os workflows são disparados automaticamente em qualquer push ou pull request para qualquer branch.
- Pull Requests estão bloqueados em qualquer caso de falha de build.
- As branches de
develop
emain
são protegidas para commits. Elas podem ser alteradas somente por pull requests e, ao menos, uma review. - Foi acordado entre os desenvolvedores a abertura de draft Pull Request durante o desenvolvimento de uma working branch e não somente no fim dela para ser mais visível o progresso de desenvolvimento e os jobs dos workflows.
Build do Backend
Configuração do Workflow
name: Java Build with Maven
on:
push:
branches:
- '*'
pull_request:
branches:
- '*'
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: Set up Apache Spark
uses: vemonet/setup-spark@v1
with:
spark-version: '3.5.1'
hadoop-version: '3'
scala-version: '2.13'
log-level: 'debug'
install-folder: '/home/runner/work'
- name: Build with Maven
run: mvn -B clean package -DskipTests
env:
SPRING_DATASOURCE_URL: jdbc:postgresql://localhost:5432/dashflow
SPRING_DATASOURCE_USERNAME: ${{ secrets.DB_USERNAME }}
SPRING_DATASOURCE_PASSWORD: ${{ secrets.DB_PASSWORD }}
MAVEN_OPTS: "--add-exports=java.base/sun.nio.ch=ALL-UNNAMED"
- name: Verify Spark Installation
run: spark-submit --version
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 com a execução dos testes unitários.
- Verificação do Spark: Confirma que o Spark está instalado corretamente.
Build do Frontend
Configuração do Workflow
name: Vue.js Build
on:
push:
branches:
- '*'
pull_request:
branches:
- '*'
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
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.
Elementos de possível melhora do CI
- Implementação de Testes de Integração com Cypress.
Resultados
- CI Automatizado: Cada push ou PR é verificado automaticamente.
- Ambiente de Build Consistente: Uso de containers para evitar variações de configuração.
- Preparação para Testes Automatizados: Estrutura pronta para implementação futura.