Uso de la API de Adoptium en pipelines de CI/CD

Si su plataforma de CI/CD no dispone de una tarea dedicada para la configuración de Temurin (como GitHub Actions), puede utilizar la API de Adoptium para descargar, verificar e instalar Eclipse Temurin directamente. Esta guía cubre el uso de la API con scripts de shell que funcionan en cualquier entorno de CI, incluyendo Azure DevOps, GitLab CI, Jenkins, CircleCI y otros.

Descripción general de la API

La API de Adoptium proporciona URLs estables para descargar binarios de Temurin. El patrón de URL general para descargar la última versión GA es:

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

Donde:

  • {version} — Versión principal de Java (por ejemplo, 8, 11, 17, 21, 25)

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

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

  • {image_type}jdk o jre

Note

No todas las combinaciones están disponibles. La API devuelve HTTP 404 si no existe ninguna compilación para la combinación especificada.

Consulta de versiones disponibles

Puede descubrir qué versiones están disponibles, incluyendo la LTS actual:

# 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'

Descarga de un binario

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"

Verificación de la descarga

Las versiones de Eclipse Temurin incluyen sumas de verificación SHA-256 y firmas GPG junto a cada binario. El proyecto Adoptium recomienda verificar su descarga en los pipelines de CI/CD para garantizar la integridad y autenticidad.

Verificación de suma de verificación SHA-256

El archivo de suma de verificación está disponible en la misma URL que el binario con .sha256.txt añadido al final:

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

Para PowerShell en 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"

Verificación de firma GPG

Las versiones de Temurin están firmadas con la clave GPG de Adoptium. El archivo de firma está disponible en la URL del binario con .sig añadido al final:

# 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}"

Ejemplo completo de script de CI

A continuación se presenta un script completo adecuado para usar en cualquier pipeline de CI/CD que descarga, verifica e instala 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

Ejemplos específicos 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

¡Ayúdanos a mejorar esta documentación!

Toda la documentación de Adoptium es de código abierto. ¿Has encontrado algo incorrecto o confuso?

Autores de la documentación
gdams
Join our Slack channel to discuss and reach out to maintainers.Join Slack