bkms-dockerfile-generator 是 BKMS 镜像构建流程使用的 Dockerfile 生成工具。它从流水线注入的环境变量中读取构建配置,根据应用语言渲染平台默认
Dockerfile,并将生成结果写入 BKMS_DOCKERFILE_PATH 指定的位置。
- 平台生成 Dockerfile:当
BKMS_DOCKERFILE_SOURCE_TYPE=bkms_generated时,工具会根据BKMS_DOCKERFILE_LANGUAGE、构建镜像、运行镜像和构建命令等配置生成 Dockerfile。 - 仓库自带 Dockerfile:当
BKMS_DOCKERFILE_SOURCE_TYPE=repository时,工具会跳过生成逻辑,由后续镜像构建流程使用仓库中的 Dockerfile。 - 流水线工具链分发:BKMS 流水线会下载该二进制并执行,由它在工作空间内生成最终参与镜像构建的 Dockerfile。
工具通过环境变量读取配置,常用变量如下:
| 变量 | 说明 |
|---|---|
BKMS_DOCKERFILE_SOURCE_TYPE |
Dockerfile 来源类型,支持 bkms_generated 和 repository |
BKMS_DOCKERFILE_LANGUAGE |
平台生成模式下的应用语言,目前支持 go、cpp |
BKMS_DOCKERFILE_PATH |
生成 Dockerfile 的目标路径 |
BKMS_DOCKERFILE_BUILDER_IMAGE |
构建阶段基础镜像 |
BKMS_DOCKERFILE_RUNNER_IMAGE |
运行阶段基础镜像 |
BKMS_DOCKERFILE_PRE_BUILD_COMMANDS |
编译前置命令,多条命令使用换行分隔 |
BKMS_DOCKERFILE_BUILD_COMMANDS |
编译命令,多条命令使用换行分隔;为空时使用语言默认构建命令 |
BKMS_DOCKERFILE_RUNTIME_ENV_COMMANDS |
运行环境命令,多条命令使用换行分隔 |
BKMS_DOCKERFILE_START_COMMAND |
容器启动命令,可为空 |
BKMS_IMAGE_NAME |
镜像名称,同时用于默认构建产物名 |
在 bkms_generated 模式下,BKMS_DOCKERFILE_LANGUAGE、BKMS_DOCKERFILE_PATH、BKMS_DOCKERFILE_BUILDER_IMAGE、
BKMS_DOCKERFILE_RUNNER_IMAGE 和 BKMS_IMAGE_NAME 为必填项。
- 生成结果会写入
BKMS_DOCKERFILE_PATH指定的路径。 - 如果目标路径包含不存在的父目录,工具会自动创建父目录。
- 如果目标文件已存在,工具会直接覆盖,便于流水线重复执行。
该目录下的 Dockerfile 用于在容器化 Go 环境中构建 bkms-dockerfile-generator 二进制,避免依赖宿主机操作系统、CPU 架构或本机
Go 工具链。构建目标固定为 linux/amd64,即使在 macOS 或其他架构机器上执行,也会产出 Linux AMD64 二进制。
- 已安装 Docker。
- 使用支持 BuildKit
--output的 Docker 版本。 - 推荐在
bkms-dockerfile-generator目录执行以下命令。
cd bkms-dockerfile-generator
mkdir -p ./bin
DOCKER_BUILDKIT=1 docker build --target artifact --output type=local,dest=./bin .构建完成后,产物路径为:
./bin/bkms-dockerfile-generator可以使用以下命令验证产物存在并查看平台信息:
ls -l ./bin/bkms-dockerfile-generator
file ./bin/bkms-dockerfile-generatorCI 中可以直接使用非交互式命令导出产物:
cd bkms-dockerfile-generator && mkdir -p ./bin && DOCKER_BUILDKIT=1 docker build --target artifact --output type=local,dest=./bin .如需将二进制上传到工具链分发地址,可在该命令成功后使用 ./bin/bkms-dockerfile-generator 作为上传源文件。