用途:在 Sealos 沙箱命名空间内、无 Docker 守护进程时,从源码构建 linux/amd64 容器镜像并推送到 GHCR。整个流程由一个脚本统一负责,不应自行手写 Job 或 Secret。
主要能力:脚本 tar 打包构建上下文(排除 .git/.sealos/.versitygw-*),写入 DevBox 本地 VersityGW S3 存储(POSIX 目录,端口 1319);当前命名空间的 Kaniko Job 通过 .sealos/build-runtime.json 中 Job 可达的端点拉取 s3:// 上下文;使用仅用于构建的 registry Secret 推送带标签镜像到 ghcr.io;从 Pod 终止消息中获取 digest。参数按 CLI 标志 → .sealos/build-runtime.json → DevBox 运行时环境变量 → 默认值的顺序自动解析。Job 以 backoffLimit: 0 运行,active deadline 上限 1800s,ttlSecondsAfterFinished: 3600,使用当前 ServiceAccount。
使用方式:在项目工作区中运行 python3 scripts/kaniko-build.py --image ghcr.io/<owner>/<repo>:<tag> [--context <dir>] [--dockerfile <path>] [--build-arg KEY=value ...],脚本路径相对本技能目录解析。
前置条件:kubectl 指向沙箱命名空间(注入的 kubeconfig);GITHUB_TOKEN 具备 write:packages 权限,镜像 owner 须等于 token 登录名小写形式;使用 commit SHA 或时间戳打标签,不要用 latest;命名空间需有创建 Job/Secret 并读取 Pod/日志的权限;上下文内需有 Dockerfile。
结果读取:成功时 stdout 输出含 digest 和 image_ref 的 JSON,部署清单建议使用 image_ref。pull 字段表示下游拉取行为:anonymous 无需拉取密钥;private 需创建拉取密钥,如 kubectl create secret docker-registry <app>-pull --docker-server=ghcr.io --docker-username=<login> --docker-password="$GITHUB_TOKEN" --dry-run=client -o yaml | kubectl apply -f -;indeterminate 需观察首个 Pod 拉取。
限制与注意:失败时脚本只报告 Job 和命名空间而不回显原始日志;禁止打印 GITHUB_TOKEN、S3 凭据或 Secret 内容;不得通过 --build-arg 传递密钥;--render-only 仅打印脱敏的 Job 清单用于结构检查,不揭示运行时契约或构建参数的实际值。构建专用 Secret 为命名空间本地且无 TTL,Job 一小时后回收。