我有一个简单的CodeBuild规范,该规范定义了测试运行后要上传的工件:
artifacts:
files:
- cypress/**/*.png
discard-paths: yes
仅当测试操作失败(捕获失败的测试屏幕的屏幕截图)时,才会生成这些工件,并将其成功上传到S3。
如果测试成功,则不会生成任何.png
文件,并且CodeBuild操作将失败:
[Container] 2018/09/21 20:06:34 Expanding cypress/**/*.png
[Container] 2018/09/21 20:06:34 Phase complete: UPLOAD_ARTIFACTS Success: false
[Container] 2018/09/21 20:06:34 Phase context status code: CLIENT_ERROR Message: no matching artifact paths found
如果buildspec中存在文件,是否可以有条件地上传文件?
或者,我可以使用s3 cli
,在这种情况下,我需要一种可以轻松访问存储桶名称和工件密钥的方法。
答案 0 :(得分:1)
要解决此问题,我将创建一个在构建成功后与glob模式匹配的占位符文件:
post_build:
commands:
- if [ -z "$CODEBUILD_BUILD_SUCCEEDING" ]; then echo "Build failing, no need to create placeholder image"; else touch cypress/0.png; fi
artifacts:
files:
- cypress/**/*.png
discard-paths: yes
答案 1 :(得分:0)
如果仍然有人基于tgk寻找解决方案,请回答。 在我的cas中,我只想在master ENV中上传工件,所以除了master之外,我创建一个占位符并上传到TMP文件夹中。
post_build:
commands:
#creating a fake file to workaround fail upload in non prod build
- |
if [ "$ENV" = "master" ]; then
export FOLDERNAME=myapp-$(date +%Y-%m-%d).$((BUILD_NUMBER))
else
touch myapp/0.tmp;
export FOLDERNAME="TMP"
fi
artifacts:
files:
- myapp/build/outputs/apk/prod/release/*.apk
- myapp/*.tmp
discard-paths: yes
name: $FOLDERNAME