我有一个CodePipeline项目托管在CodeCommit Git存储库中,并由maven构建。该存储库使用CodeBuild进行编译,并将构建的工件上载到ECR。管道有一个阶段来编译代码,然后一个单独的阶段来上载所构建的工件。我在稍后的CodeBuild阶段遇到问题,说它无法获取工件。阶段之间的通信使用S3存储桶。
第一个CodeBuild阶段buildspec :(用于编译代码)
artifacts:
files:
- rest.war
- pomversion
name: GF_APP
第二CodeBuild阶段buildspec :(创建docker映像)
build:
commands:
- echo Building the Docker image...
- ls -l $CODEBUILD_SRC_DIR_GF_APP
- cp $CODEBUILD_SRC_DIR_GF_APP/*.war .
错误:
[Container] 2019/11/18 16:53:12 Running command echo Building the Docker image...
Building the Docker image...
[Container] 2019/11/18 16:53:12 Running command ls -l $CODEBUILD_SRC_DIR_GF_APP
total 45252
-rw-r--r-- 1 root root 46332873 Nov 18 15:49 rest.war
-rw-r--r-- 1 root root 14 Nov 18 15:49 pomversion
[Container] 2019/11/18 16:53:12 Running command cp $CODEBUILD_SRC_DIR_GF_APP/*.war .
cp: cannot stat '/*.war': No such file or directory
可以看到目录中存在war文件,似乎没有任何权限丢失。两个CodeBuild项目使用相同的角色,并具有读取存储工件的S3存储桶的权限。 CodePipleline项目还具有足够的权限来读取和写入存储桶,该存储桶使用默认的aws / s3 KMS密钥进行了加密。
关于CodeBuild为什么找不到文件的任何指针?我也尝试过给出工件的全名,尽管无济于事。
谢谢。
尽管我现在无法解释原因,但是当在CodePipeline中将工件选择为辅助工件时,它可以工作。选择了一个随机工件作为管道第二阶段的主要输入,CodeBuild能够在构建过程中找到并复制该工件。