我有一个 GitLab CI 管道,默认情况下在所有阶段都使用适用于 Java 的 Temurin Docker (Linux) 映像。
我需要扩展构建目标以使用多个操作系统:Linux、macOS、Windows。因此,如果有以下 Docker 映像:
eclipse-temurin:21-jdk-jammy
、eclipse-temurin:21-jdk-nanoserver
和 eclipse-temurin:21-jdk-macos
,是否有办法针对所有这些 Docker 映像运行给定作业,而不重复作业定义?
我最初采用的路线是使用 GitLab CI 的
matrix
但它不太有效:
assemble:
image: eclipse-temurin:21-jdk-${OS}
parallel:
matrix:
- OS: [jammy, nanoserver]
script:
- ./gradlew packageDistributionForCurrentOS
stage: assemble
我看到 Docker 镜像已正确解析,但不知何故,GitLab 运行程序失败了
eclipse-temurin:21-jdk-nanoserver
:
Running with gitlab-runner 16.6.0~beta.105.gd2263193 (d2263193)
on blue-5.saas-linux-small-amd64.runners-manager.gitlab.com/default -AzERasQ, system ID: s_4cb09cee29e2
feature flags: FF_USE_IMPROVED_URL_MASKING:true
Preparing the "docker+machine" executor 00:05
Using Docker executor with image eclipse-temurin:21-jdk-nanoserver ...
Pulling docker image eclipse-temurin:21-jdk-nanoserver ...
WARNING: Failed to pull image with policy "always": no matching manifest for linux/amd64 in the manifest list entries (manager.go:237:0s)
ERROR: Job failed: failed to pull image "eclipse-temurin:21-jdk-nanoserver" with specified policies [always]: no matching manifest for linux/amd64 in the manifest list entries (manager.go:237:0s)
这个错误并没有告诉我太多信息。我只能推断 Docker 镜像
eclipse-temurin:21-jdk-nanoserver
不适用于 linux/amd64
架构,这可能是 GitLab 运行器的主机实际安装的,但这些 Docker 镜像应该与基础设施无关,并且 21-jdk-nanoserver
确实是 Windows 映像。
关于如何推进这种方法以实现这一期望的行为有什么建议吗?