AWS代码管道,dockerfile无法访问环境变量CODEBUILD_SRC_DIR和CODEBUILD_SRC_DIR_SecondarySource

问题描述 投票:0回答:1

我正在使用AWS Codepipeline。我有2 codecommit回购说source1和source2。我正在使用CI / CD的代码管道。

我创建的

Codepipeline]正在使用codecommit仓库,即代码管道源中的source1source2。现在,Codebuild在其输入工件中也同时使用了输入源,即source1和source2。Source1是主要的,source2是次要的输入工件

我有一个buildspec.yml文件,该文件使用存储在source1根目录中的dockerfile来构建代码。

现在的问题是,dockerfile无法在容器中复制source2代码。即说source1在其中具有文件夹abc,而source2在其中具有文件夹xyz

我正在下面的docker文件中执行

COPY ./abc /source1/abc/ --working

COPY ./xyz /source2/xyz/ --Not working,getting below error

复制失败:stat / var / lib / docker / tmp / docker-builder297252497 / xyz:无此类文件或目录。

然后我在下面在dockerfile中尝试过

COPY ./abc /source1/abc/ --working

COPY $CODEBUILD_SRC_DIR_source2/xyz /source2/xyz/ --Not working,getting same error

还尝试将CD放入$ CODEBUILD_SRC_DIR_source2中,然后运行COPY命令,但存在相同的错误。

[之后,我尝试在yaml和dockerfile中同时打印PWD,CODEBUILD_SRC_DIR,CODEBUILD_SRC_DIR_source2。它的输出低于输出

在yaml文件中

echo $CODEBUILD_SRC_DIR prints --> /codebuild/output/src886/src/s3/00

echo CODEBUILD_SRC_DIR_source2 --> /codebuild/output/src886/src/s3/01

echo $PWD --> /codebuild/output/src886/src/s3/00

在dockerfile中

echo $CODEBUILD_SRC_DIR prints --> prints nothing

echo CODEBUILD_SRC_DIR_source2 --> prints nothing

echo $PWD --> print '/'

似乎dockerfile似乎无权访问CODEBUILD_SRC_DIRCODEBUILD_SRC_DIR_source2环境变量。

任何人都不知道我该如何访问dockerfile中的CODEBUILD_SRC_DIR_source2source2,以便我可以将它们复制到容器中并使代码构建成功。

预先感谢!

amazon-web-services docker dockerfile aws-codepipeline aws-codebuild
1个回答
0
投票

为面临相同问题的其他人添加答案。希望这能对某人有所帮助!

问题是关于传递到dockerfile的构建上下文当只有一个存储库作为输入源时,则codebuild使用此目录以pwd进行构建->CODEBUILD_SRC_DIR=/codebuild/output/src894561443/src第一个存储库中的源(如果只有一个存储库)位于同一目录中,即CODEBUILD_SRC_DIR=/codebuild/output/src894561443/src

并且在buildspec.yml文件中,我们具有以下命令来构建映像docker build -t标签。 (使用第一个源的根目录中存在的dockerfile)

但是当我们有多个源代码时,代码构建会存储这样的输入工件

CODEBUILD_SRC_DIR=/codebuild/output/src886/src/s3/00
CODEBUILD_SRC_DIR_source2=/codebuild/output/src886/src/s3/01

而不是CODEBUILD_SRC_DIR=/codebuild/output/src886/src/其中CODEBUILD_SRC_DIR是第一个输入工件(第一个代码提交存储库)并且CODEBUILD_SRC_DIR_source2是第二个输入工件(第二个代码提交存储库)

在这种情况下,codebuild使用目录-> CODEBUILD_SRC_DIR=/codebuild/output/src886/src/s3/00 as pwd

所以下面的命令将上下文作为点'传递给了。 (密码)docker build -t标签。结果,只有第一个源传递给了docker,因为CODEBUILD_SRC_DIR是PWD,而docker无法引用第二个源。

为了解决这个问题,我们传递了CODEBUILD_SRC_DIR=/codebuild/output/src886/src/s3/00 i.e /codebuild/output/src886/src/s3/的父目录在这样的docker build命令中。

docker build -t tag -f $CODEBUILD_SRC_DIR/Dockerfile /codebuild/output/src886/src/s3/

和dockerfile中的source1和source2如下所示

source1=./00
source2=./01

并且有效!!

© www.soinside.com 2019 - 2024. All rights reserved.