Skip to content

ci: replace Liberica OpenJDK base images with debian:bullseye-slim + SDKMAN#479

Open
jbachorik wants to merge 2 commits intomainfrom
jb/fix-base-images
Open

ci: replace Liberica OpenJDK base images with debian:bullseye-slim + SDKMAN#479
jbachorik wants to merge 2 commits intomainfrom
jb/fix-base-images

Conversation

@jbachorik
Copy link
Copy Markdown
Collaborator

@jbachorik jbachorik commented Apr 15, 2026

What

Replaces the bellsoft/liberica-openjdk-debian and bellsoft/liberica-openjdk-alpine-musl base images used when building CI Docker images.

glibc builds: debian:bullseye-slim (Debian 11, glibc 2.31), pinned by sha256 digest. JDK 21 (Temurin 21.0.3) and Maven are installed at image-build time via SDKMAN.

musl builds: eclipse-temurin:21-jdk-alpine (Alpine, musl), pinned by sha256 digest — unchanged approach, digest-pinned.

Also fixes a pre-existing bug in .gitlab/scripts/rebuild-images.sh where PROJECT_ROOT resolved to .gitlab/ instead of the repo root, causing all Dockerfile paths to be doubled (.gitlab/.gitlab/base).

Why

  • The bellsoft/liberica-openjdk-* images are a third-party vendor distribution with no multi-arch manifest guarantees.
  • Debian 11 (Bullseye, glibc 2.31) matches the glibc baseline of the previous Liberica images — produced native binaries require only glibc ≥2.31 at runtime.
  • eclipse-temurin:21-jdk-bullseye does not exist (Adoptium skipped Debian 11 for JDK 21), so SDKMAN is used to install JDK 21 on top of the plain Debian base.
  • Digest-pinning prevents silent layer replacement between image rebuilds.

Changes

File Change
.gitlab/build-deploy/images.yml OPENJDK_BASE_IMAGE*debian:bullseye-slim@sha256:0083…
.gitlab/config.env OPENJDK_BASE_IMAGE_AMD64/ARM64 → same digest
.gitlab/base/Dockerfile Default ARG BASE_IMAGEdebian:bullseye-slim; add SDKMAN install for JDK 21 + Maven; remove maven and libclang-rt-dev from apt (former pulls in Java 11 via default-jre-headless, latter is Ubuntu-only)
.gitlab/scripts/rebuild-images.sh Fix PROJECT_ROOT path: ..../..

Test plan

  • Rebuild CI images using the new base (build-deploy pipeline) and confirm successful image push
  • Run profiler build jobs (build:x64, build:arm64) against new images
  • Verify produced binaries reference only glibc ≤2.31 symbols — confirmed: image has glibc 2.31, gcc-compiled binary requires only GLIBC_2.17
  • Verify java -version reports 21.0.3 (Temurin) inside the built image — confirmed locally

🤖 Generated with Claude Code

…SDKMAN

Replace vendor-specific bellsoft/liberica-openjdk-* images with
debian:bullseye-slim (Debian 11, glibc 2.31) for glibc builds and
eclipse-temurin:21-jdk-alpine for musl builds. All images pinned by
sha256 digest for reproducibility.

JDK 21 (Temurin 21.0.3) and Maven are installed at image-build time
via SDKMAN, keeping glibc 2.31 as the build baseline so produced
native binaries require only glibc >=2.31 at runtime.

Removes libclang-rt-dev (Ubuntu-only package) and maven from apt
installs; maven pulled in default-jre-headless (Java 11) which
would shadow the SDKMAN-managed JDK 21.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@jbachorik jbachorik force-pushed the jb/fix-base-images branch from 3ed3c91 to 075b1dc Compare April 15, 2026 19:16
@jbachorik jbachorik changed the title ci: replace Liberica OpenJDK base images with eclipse-temurin ci: replace Liberica OpenJDK base images with debian:bullseye-slim + SDKMAN Apr 15, 2026
Script was at .gitlab/scripts/rebuild-images.sh; one '..' resolves to
.gitlab/, not the repo root. Dockerfile paths like .gitlab/base/Dockerfile
then expanded to .gitlab/.gitlab/base/Dockerfile. Use '../..' instead.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@jbachorik jbachorik marked this pull request as ready for review April 15, 2026 19:58
@jbachorik jbachorik requested a review from a team as a code owner April 15, 2026 19:58
@dd-octo-sts
Copy link
Copy Markdown

dd-octo-sts bot commented Apr 15, 2026

CI Test Results

Run: #24474281138 | Commit: 515754d | Duration: 29m 8s (longest job)

All 32 test jobs passed

Status Overview

JDK glibc-aarch64/debug glibc-amd64/debug musl-aarch64/debug musl-amd64/debug
8 - - -
8-ibm - - -
8-j9 - -
8-librca - -
8-orcl - - -
11 - - -
11-j9 - -
11-librca - -
17 - -
17-graal - -
17-j9 - -
17-librca - -
21 - -
21-graal - -
21-librca - -
25 - -
25-graal - -
25-librca - -

Legend: ✅ passed | ❌ failed | ⚪ skipped | 🚫 cancelled

Summary: Total: 32 | Passed: 32 | Failed: 0


Updated: 2026-04-15 20:08:00 UTC

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant