-1

我们正在使用 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 时。

我在构建中收到的错误消息是:errorMessageWhenKO

4

1 回答 1

0

正如@AymDev 在评论中所述,它通过在 buildspec.yml 文件中的 CodeBuild 环境变量周围添加引号来工作。

这意味着做这样的事情:

docker build -t ABC:v1 --build-arg LAUNCH_COMMAND="${LAUNCH_COMMAND}" -f ${DOCKERFILE_PATH} .

于 2021-10-26T09:12:42.063 回答