Introdução ao CI/CD para Projetos Java com GitHub Actions
O desenvolvimento moderno de software é impossível sem a automação dos processos de compilação, teste e implantação. CI/CD (Continuous Integration / Continuous Deployment) é um conjunto de práticas que permite que as equipes entreguem mudanças na produção de forma rápida e segura. Para projetos Java, uma das ferramentas mais convenientes é o GitHub Actions — um sistema CI/CD integrado que não requer a configuração de um servidor separado.
Neste artigo, vamos analisar como configurar um pipeline para uma aplicação Java: desde a compilação e execução de testes até a publicação de artefatos. Você aprenderá a usar Maven, JUnit e GitHub Actions para criar um processo de entrega confiável.
1. Fundamentos do GitHub Actions: estrutura do workflow
O GitHub Actions funciona com base em workflows — arquivos de configuração no formato YAML, armazenados na pasta .github/workflows. Cada workflow consiste em um ou mais jobs, que são executados em máquinas virtuais (runners).
Para um projeto Java, um workflow típico inclui as seguintes etapas:
- Checkout — clonagem do repositório
- Setup JDK — instalação da versão necessária do Java
- Cache — armazenamento em cache das dependências do Maven/Gradle para acelerar a compilação
- Build & Test — compilação e execução dos testes
- Deploy — publicação de artefatos (opcional)
Vamos considerar um exemplo básico de configuração para Java 17 e Maven:
name: Java CI with Maven
on: push: branches: [ "main" ] pull_request: branches: [ "main" ]
jobs: build: runs-on: ubuntu-latest
steps: - 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 package --file pom.xml
- name: Run tests run: mvn test
- name: Upload JAR artifact uses: actions/upload-artifact@v4 with: name: app-jar path: target/*.jarEste workflow é executado a cada push ou pull request no branch main. Ele compila o projeto, executa os testes e salva o arquivo JAR como um artefato.
2. Configuração avançada: teste e qualidade do código
Uma compilação simples é apenas o começo. Em projetos reais, é importante controlar a qualidade do código. Vamos adicionar etapas ao workflow para análise estática e geração de relatórios.
Primeiro, vamos conectar o JaCoCo para medir a cobertura de código pelos testes. Adicione o plugin ao pom.xml:
<plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>0.8.11</version> <executions> <execution> <goals><goal>prepare-agent</goal></goals> </execution> <execution> <id>report</id> <phase>test</phase> <goals><goal>report</goal></goals> </execution> </executions></plugin>Agora, vamos atualizar o workflow, adicionando a verificação de cobertura e a publicação do relatório:
- name: Run tests with coverage run: mvn verify
- name: Upload JaCoCo report uses: actions/upload-artifact@v4 with: name: coverage-report path: target/site/jacoco/Também podemos adicionar o linter Checkstyle ou SpotBugs. Exemplo para Checkstyle:
- name: Checkstyle run: mvn checkstyle:checkEssas etapas ajudarão a identificar automaticamente problemas no