本文档说明当前正式构建入口,以及 tooling/、base-images/、runtime-images/、tests/runtime-smoke/ 之间的关系。
.github/workflows/build-runtime-images.yaml.github/workflows/test-runtime-smoke.yaml
其中:
build-runtime-images.yaml负责发布tooling工具镜像、基础镜像和运行时镜像test-runtime-smoke.yaml负责对runtime-images/产物执行 smoke test
tooling/:tooling镜像的构建上下文和公共脚本base-images/: 基础镜像定义,按operating-systems / languages / frameworks分层runtime-images/: 最终运行时镜像定义tests/runtime-smoke/: 与runtime-images/对齐的 smoke test 脚本
build-runtime-images.yaml 是唯一的发布入口,适合以下场景:
- 一次触发完成目标及依赖链
- 对单个 image 或 runtime 做增量发布
- 在同一套流程里同时支持 GHCR 和阿里云 ACR
核心输入:
release_tag: 本次发布版本target: 选择构建范围。常用示例:all、runtime/lang/node.js/22、base/lang/node.js/22profile:quick | full | releaseoverrides_json: 可选版本覆盖,支持tools / os / framework / node / runtimel10n、arch、aliyun_enabled: 常用可选项
其中:
quick: 只构建目标本身,不补依赖full: 自动补齐依赖链,适合日常手工构建release: 自动启用l10n=both与arch=both
target=allprofile=release
target=runtime/fw/<framework>/<version>profile=full
例如:
target=runtime/fw/sandbox/v1
target=base/fw/sandbox/v1或target=runtime/fw/sandbox/v1profile=quick
注意:quick 依赖目标所需的上游镜像已经存在于目标 registry,否则会在 FROM 阶段失败。
当前正式流程使用三套仓库:
tooling/->ghcr.io/<owner>/devbox-tooling/tooling:<tag>base-images/->ghcr.io/<owner>/devbox-base-images/...runtime-images/->ghcr.io/<owner>/devbox-runtime-images/...
阿里云 ACR 开启后沿用相同层级,只替换 registry 和 namespace。
runtime-images/ 的 CI 发布产物使用 BuildKit registry exporter,并启用
oci-mediatypes=true,compression=estargz,force-compression=true,以便支持
containerd stargz snapshotter 等运行时的 lazy pull。
ALIYUN_REGISTRYALIYUN_USERNAMEALIYUN_PASSWORDALIYUN_NAMESPACE
建议确认:
ALIYUN_REGISTRY是实际 registry 地址ALIYUN_NAMESPACE只填命名空间,不带仓库名- 账号具备目标命名空间推送权限
- workflow dispatch 时显式打开
aliyun_enabled=true
test-runtime-smoke.yaml 用于验证 runtime-images/ 中的产物是否可用。
核心输入:
tag: 运行时镜像 tag,不包含本地化后缀kind:all | operating-systems | languages | frameworksname: 可选,指定某个目录名,仅测试单个目标
工作流会:
- 从
runtime-images/生成测试矩阵 - 根据
tests/runtime-smoke/下的相对路径定位测试脚本 - 默认拉取
en-us产物 - 在
amd64和arm64上分别执行 smoke test
示例:
runtime/fw/sandbox/v1runtime/lang/node.js/22runtime/os/debian/12.6base/fw/sandbox/v1base/lang/node.js/22base/os/debian/12.6
其中:
runtime/...: 构建runtime-images/下最终提供给 DevBox 使用的运行时镜像base/...: 构建base-images/下的上游基础镜像os、lang、fw: 分别对应operating-systems、languages、frameworks
不要填写 Dockerfile 绝对路径。
通常只需要一次:
target=runtime/fw/<framework>/<version>profile=full
优先检查:
- 是否真的开启了
aliyun_enabled - 相关 secrets 是否完整
- namespace 与 registry 是否匹配
- 多架构分片镜像是否已先成功推送