上传 CodeBuild 构件 *如果*它们存在

Upload CodeBuild artifacts *if* they exist

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

为了解决这个问题,如果构建成功,我将创建一个与 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

如果有人仍在寻找基于 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