用途:在没有 Docker 守护进程的 Kubernetes 命名空间内构建 linux/amd64 容器镜像,并推送到 GHCR,用于 Sealos 部署场景。整个流程由单个脚本负责,不要自行手写 Job 或 Secret。
主要能力:脚本会打包构建上下文(排除 .git/.sealos/.versitygw-*),经 DevBox 本地 VersityGW S3 存储(POSIX 目录,端口 1319)中转,由当前命名空间内的 Kaniko Job 拉取 s3:// 上下文,构建后推送带标签的镜像到 ghcr.io,并从 Pod 终止消息中捕获 digest。配置按 CLI 参数 → .sealos/build-runtime.json → DevBox 运行时环境变量 → 默认值的顺序自动解析。Job 使用 backoffLimit: 0、最长 1800 秒的 active deadline、ttlSecondsAfterFinished: 3600 和当前 ServiceAccount。
使用方式:在项目工作区运行 python3 scripts/kaniko-build.py --image ghcr.io/<owner>/<repo>:<tag> [--context <dir>] [--dockerfile <path-relative-to-context>] [--build-arg KEY=value ...]。成功时 stdout 输出含 digest 和 image_ref 的 JSON,部署清单建议使用 image_ref 固定 digest。
前置条件:kubectl 指向沙箱命名空间;GITHUB_TOKEN 需 write:packages 权限,镜像 owner 须等于 token 登录名(小写);命名空间需有创建 Job/Secret 和读取 Pod/日志的权限;上下文中需有 Dockerfile。标签应使用 commit SHA 或时间戳,不要用 latest。
限制与注意:私有 GHCR 包需创建拉取 Secret(kubectl create secret docker-registry <app>-pull ...)。失败时脚本会打印 Job 状态、Pod 状态和 Kaniko 日志尾部。切勿打印 GITHUB_TOKEN、S3 凭据或 Secret 内容,也不要通过 --build-arg 传递密钥。