如果存在,请上传CodeBuild工件*

时间:2018-09-21 20:14:06

标签: amazon-web-services aws-codepipeline aws-codebuild

我有一个简单的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,在这种情况下,我需要一种可以轻松访问存储桶名称和工件密钥的方法。

2 个答案:

答案 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