CI/CD para projetos Java: GitHub Actions

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

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.xml

Neste 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

Blogs

Book Recommendations