Introdução: Automação de Desenvolvimento Java com GitHub Actions
O desenvolvimento Java moderno é impensável sem automação. Builds, testes e deploys manuais não são apenas uma perda de tempo, mas também uma fonte de erros críticos. CI/CD (Continuous Integration / Continuous Deployment) resolve esse problema, transformando operações rotineiras em processos automáticos. Uma das ferramentas mais populares para implementar CI/CD é o GitHub Actions.
O GitHub Actions está diretamente integrado ao GitHub, o que o torna a escolha ideal para projetos Java armazenados nesta plataforma. Ele permite criar pipelines poderosos que são executados a cada push, pull request ou em um agendamento. Neste artigo, vamos detalhar como configurar um ciclo completo de CI/CD para uma aplicação Java: desde o build e teste até o deploy. Você aprenderá como escrever configurações YAML eficientes, usar cache de dependências e integrar ferramentas populares como Maven e Gradle.
1. Fundamentos do GitHub Actions para Java: Workflow, Jobs e Steps
Antes de escrever código, é importante entender a arquitetura do GitHub Actions. Cada pipeline é definido em um arquivo .github/workflows/*.yml. Os componentes principais são:
- Workflow — é o próprio pipeline. Ele contém um ou mais jobs.
- Jobs — blocos lógicos que são executados em um único runner (máquina virtual). Jobs podem depender uns dos outros.
- Steps — comandos específicos dentro de um job: instalação do JDK, execução do Maven, publicação de artefatos.
Para projetos Java, o passo chave é a configuração do Java Development Kit (JDK). O GitHub Actions fornece a ação pronta actions/setup-java, que suporta todas as distribuições populares do JDK (Oracle, OpenJDK, Adoptium).
name: Java CI/CD Pipeline
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' - name: Build with Maven run: mvn clean install --file pom.xmlNeste exemplo, criamos um workflow básico que é executado em push ou pull request para o branch main. Ele usa Ubuntu, instala o JDK 17 (distribuição Temurin) e executa o build com Maven. Este é o conjunto mínimo para Continuous Integration.
2. Build e teste: Maven, Gradle e cache
O build é o coração do CI/CD. No entanto, simplesmente executar mvn install não é suficiente. Em projetos grandes, o download de dependências pode levar minutos. Para acelerar o processo, use cache. O GitHub Actions permite armazenar em cache o diretório ~/.m2/repository (para Maven) ou ~/.gradle/caches (para Gradle).
Aqui está um exemplo com cache para Maven:
jobs: build-and-test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4
- name: Cache Maven dependencies uses: actions/cache@v3 with: path: ~/.m2/repository key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} restore-keys: | ${{ runner.os }}-maven-
- name: Set up JDK 17 uses: actions/setup-java@v4 with: java-version: '17' distribution: 'temurin'
- name: Build and run tests run: mvn clean verify --file pom.xml
- name: Upload test results if: always() uses: actions/upload-artifact@v4 with: name: test-results path: target/surefire-reports/Observe a flag if: always() no passo de upload dos resultados dos testes. Ela garante que o artefato