Usando a API do Adoptium em Pipelines CI/CD

Se sua plataforma CI/CD não possui uma tarefa dedicada de configuração do Temurin (como GitHub Actions), você pode usar a API do Adoptium para baixar, verificar e instalar o Eclipse Temurin diretamente. Este guia aborda o uso da API com scripts shell que funcionam em qualquer ambiente CI, incluindo Azure DevOps, GitLab CI, Jenkins, CircleCI e outros.

Visão Geral da API

A API do Adoptium fornece URLs estáveis para baixar binários do Temurin. O padrão geral de URL para baixar o último lançamento GA é:

https://api.adoptium.net/v3/binary/latest/{version}/ga/{os}/{arch}/{image_type}/hotspot/normal/eclipse

Onde:

  • {version} — Versão principal do Java (por exemplo, 8, 11, 17, 21, 25)

  • {os} — Sistema operacional: linux, windows, mac, alpine-linux, aix, solaris

  • {arch} — Arquitetura: x64, aarch64, arm, ppc64le, s390x, riscv64

  • {image_type}jdk ou jre

Note

Nem todas as combinações estão disponíveis. A API retorna HTTP 404 se não existir nenhum build para a combinação especificada.

Consultando Versões Disponíveis

Você pode descobrir quais versões estão disponíveis, incluindo o LTS atual:

# Get the most recent LTS version
curl -s https://api.adoptium.net/v3/info/available_releases | jq '.most_recent_lts'

# List all available LTS releases
curl -s https://api.adoptium.net/v3/info/available_releases | jq '.available_lts_releases'

Baixando um Binário

Linux / macOS

#!/bin/bash
set -euo pipefail

JAVA_VERSION="25"
OS="linux"
ARCH="x64"
IMAGE_TYPE="jdk"

API_URL="https://api.adoptium.net/v3/binary/latest/${JAVA_VERSION}/ga/${OS}/${ARCH}/${IMAGE_TYPE}/hotspot/normal/eclipse"

# Download the binary (follows redirects)
FETCH_URL=$(curl -s -w %{redirect_url} "${API_URL}")
FILENAME=$(curl -OLs -w %{filename_effective} "${FETCH_URL}")

echo "Downloaded ${FILENAME}"

Windows (PowerShell)

$JavaVersion = "25"
$ApiUrl = "https://api.adoptium.net/v3/binary/latest/$JavaVersion/ga/windows/x64/jdk/hotspot/normal/eclipse"

$Response = Invoke-WebRequest -Uri $ApiUrl -MaximumRedirection 0 -ErrorAction SilentlyContinue
$DownloadUrl = $Response.Headers.Location
$FileName = [System.IO.Path]::GetFileName($DownloadUrl)

Invoke-WebRequest -Uri $DownloadUrl -OutFile $FileName
Write-Host "Downloaded $FileName"

Verificando o Download

Os lançamentos do Eclipse Temurin incluem checksums SHA-256 e assinaturas GPG junto com cada binário. O projeto Adoptium recomenda fortemente verificar seu download em pipelines CI/CD para garantir integridade e autenticidade.

Verificação de Checksum SHA-256

O arquivo de checksum está disponível na mesma URL que o binário com .sha256.txt acrescentado:

# Download and verify the checksum in one step
curl -Ls "${FETCH_URL}.sha256.txt" | sha256sum -c --status
echo "Checksum verified successfully"

Para PowerShell no Windows:

# Download expected checksum
$ExpectedHash = (Invoke-WebRequest -Uri "$DownloadUrl.sha256.txt").Content.Split(" ")[0]

# Compute actual hash
$ActualHash = (Get-FileHash $FileName -Algorithm SHA256).Hash

if ($ExpectedHash -ne $ActualHash) {
    Write-Error "Checksum verification failed!"
    exit 1
}
Write-Host "Checksum verified successfully"

Verificação de Assinatura GPG

Os lançamentos do Temurin são assinados com a chave GPG do Adoptium. O arquivo de assinatura está disponível na URL do binário com .sig acrescentado:

# Import the Adoptium GPG public key
wget -qO - https://packages.adoptium.net/artifactory/api/gpg/key/public | gpg --import

# Download the signature file
curl -OLs "${FETCH_URL}.sig"

# Verify the signature
gpg --verify "${FILENAME}.sig" "${FILENAME}"

Exemplo Completo de Script CI

Aqui está um script completo adequado para uso em qualquer pipeline CI/CD que baixa, verifica e instala o Eclipse Temurin:

#!/bin/bash
set -euo pipefail

# Configuration
JAVA_VERSION="${JAVA_VERSION:-25}"
OS="${OS:-linux}"
ARCH="${ARCH:-x64}"
IMAGE_TYPE="${IMAGE_TYPE:-jdk}"

API_URL="https://api.adoptium.net/v3/binary/latest/${JAVA_VERSION}/ga/${OS}/${ARCH}/${IMAGE_TYPE}/hotspot/normal/eclipse"

echo "Downloading Eclipse Temurin ${JAVA_VERSION} (${OS}/${ARCH})..."

# Download the binary
FETCH_URL=$(curl -s -w %{redirect_url} "${API_URL}")
FILENAME=$(curl -OLs -w %{filename_effective} "${FETCH_URL}")

# Verify SHA-256 checksum
echo "Verifying checksum..."
curl -Ls "${FETCH_URL}.sha256.txt" | sha256sum -c --status
echo "Checksum OK"

# Extract and configure
INSTALL_DIR="/opt/java/${JAVA_VERSION}"
mkdir -p "${INSTALL_DIR}"
tar xzf "${FILENAME}" -C "${INSTALL_DIR}" --strip-components=1

# Set environment variables
export JAVA_HOME="${INSTALL_DIR}"
export PATH="${JAVA_HOME}/bin:${PATH}"

echo "Eclipse Temurin ${JAVA_VERSION} installed to ${JAVA_HOME}"
java -version

Exemplos por Plataforma

Azure DevOps

steps:
  - script: |
      JAVA_VERSION="25"
      API_URL="https://api.adoptium.net/v3/binary/latest/${JAVA_VERSION}/ga/linux/x64/jdk/hotspot/normal/eclipse"
      FETCH_URL=$(curl -s -w %{redirect_url} "${API_URL}")
      FILENAME=$(curl -OLs -w %{filename_effective} "${FETCH_URL}")
      curl -Ls "${FETCH_URL}.sha256.txt" | sha256sum -c --status
      mkdir -p /opt/java && tar xzf "${FILENAME}" -C /opt/java --strip-components=1
      echo "##vso[task.setvariable variable=JAVA_HOME]/opt/java"
      echo "##vso[task.prependpath]/opt/java/bin"
    displayName: 'Install Eclipse Temurin 25'

GitLab CI

install-temurin:
  before_script:
    - |
      JAVA_VERSION="25"
      API_URL="https://api.adoptium.net/v3/binary/latest/${JAVA_VERSION}/ga/linux/x64/jdk/hotspot/normal/eclipse"
      FETCH_URL=$(curl -s -w %{redirect_url} "${API_URL}")
      FILENAME=$(curl -OLs -w %{filename_effective} "${FETCH_URL}")
      curl -Ls "${FETCH_URL}.sha256.txt" | sha256sum -c --status
      tar xzf "${FILENAME}" -C /opt --strip-components=1
      export JAVA_HOME=/opt
      export PATH="${JAVA_HOME}/bin:${PATH}"
      java -version

Jenkins (Scripted Pipeline)

node {
    stage('Install Temurin') {
        sh '''
            JAVA_VERSION="25"
            API_URL="https://api.adoptium.net/v3/binary/latest/$JAVA_VERSION/ga/linux/x64/jdk/hotspot/normal/eclipse"
            FETCH_URL=$(curl -s -w %{redirect_url} "$API_URL")
            FILENAME=$(curl -OLs -w %{filename_effective} "$FETCH_URL")
            curl -Ls "$FETCH_URL.sha256.txt" | sha256sum -c --status
            tar xzf "$FILENAME" -C /opt --strip-components=1
        '''
        env.JAVA_HOME = '/opt'
        env.PATH = "${env.JAVA_HOME}/bin:${env.PATH}"
    }
}
edit icon

Ajude-nos a melhorar esta documentação!

Toda a documentação do Adoptium é open source. Viu algo errado ou confuso?

Autores da Documentação
gdams
Join our Slack channel to discuss and reach out to maintainers.Join Slack