我们正在使用 CodeBuild AWS 服务,它使用 buildspec.yml 文件在构建的不同阶段(pre_build、build、post_build 等)执行一些命令。我想要一个全局 buildspec.yml 文件,感谢 CodeBuild 中的环境变量,可以对其进行编辑。例如,我们传递环境类型(staging、pre-prod、production...等)、要执行的命令、S3 存储桶等。
在这个文件中,我创建了一个 docker 镜像,所以我使用 docker build,我标记我的镜像,添加参数以传递给 Dockerfile,并指定 Dockerfile 路径。
使用此命令:
docker build -t ABC:v1 --build-arg LAUNCH_COMMAND=${LAUNCH_COMMAND} -f ${DOCKERFILE_PATH} .
要指定,我使用 build-arg 传递命令来启动我们的应用程序(环境之间不一样)。传递的第一个是 LAUNCH_COMMAND,即 Dockerfile 中变量的名称,第二个带有${}
语法的是 AWS CodeBuild 的环境变量。
问题是,我的启动命令包含空格。
这是我尝试过的:
带空格的 CodeBuild 变量:KO
直接写在 docker build 命令中,带空格并用引号括起来:KO
正如我后来发现的,根据这个线程,当 Dockerfile 获取变量时,我们需要对变量进行转义以保留空格。
带有空格的 CodeBuild 变量:KO
直接写在 docker build 命令中,空格转义并用引号括起来:OK
通过对 CodeBuild 环境进行回显,可以保留空格以及转义字符。所以问题似乎出在 CodeBuild 将变量传递给 docker build 时。