我正在hub.docker.com上为服务构建docker映像。在编译期间,将源的提交哈希作为参数传递给CMake(以便可以将其嵌入版本信息中)。根据Advanced options for Autobuild and Autotest,提交哈希会自动作为SOURCE_COMMIT
环境变量使用。
为了使用该信息调用cmake,操作如下-我不确定这个迷宫是最简单的方法:
hooks/build
这实际上是将变量传递给docker build(取自this example):
#!/bin/bash
docker build --build-arg SOURCE_COMMIT=$SOURCE_COMMIT -f $DOCKERFILE_PATH -t $IMAGE_NAME .
Dockerfile
使用这两行获取值:
ARG SOURCE_COMMIT # get it from the --build-arg
ENV SOURCE_COMMIT $SOURCE_COMMIT # set shell variable (of the same name)
最后传递给cmake in
RUN cmake -DGIT_REVISION_HASH=$SOURCE_COMMIT # and so on ...
总而言之,将构建器外壳的环境变量作为构建参数传递,然后获取并分配给内部外壳环境变量,然后将其扩展并作为cmake参数传递。
我错过了什么吗?还是一定要这么复杂?
这也是我一直都这样做的方式。我认为没有其他方法。
实际上,我想是这样的。
ARG指令定义了一个变量,用户可以在构建时使用--build-arg =标志使用docker build命令将其传递给构建器。如果用户指定了未在Dockerfile中定义的构建参数,则该构建会输出警告。