"Invalid JSON" 在 AWS S3 管道中尝试将元数据添加到对象时

"Invalid JSON" in AWS S3 pipeline when trying to add metadata to object

我正在使用 bitbucket 的管道将文件上传到 AWS S3。我的 bitbucket-pipelines.yml 很大程度上遵循了这个例子 here。但是,我还使用 EXTRA_ARGS 参数来指定几个其他选项(主要排除),我决定也像这样添加 --metadata

EXTRA_ARGS: "--size-only --exclude=README.md --metadata {\"testMeta\": \"testData\"}"

...这按预期工作,上传的文件添加了自定义元数据。但是如果我这样做...:[=​​18=]

EXTRA_ARGS: "--size-only --exclude=README.md --metadata {\"testMeta\": \"$BITBUCKET_COMMIT\"}"

即使用Bitbucket的default variables之一,我的流水线输出如下:

INFO: Starting deployment to S3...
aws s3 sync /opt/atlassian/pipelines/agent/build/public s3://[my-s3-name]/ --acl=public-read --size-only --exclude=README.md --metadata {"testMeta": "8cd36431ef08d5be22f28b2cfc63d0179db3618d"}
Error parsing parameter '--metadata': Invalid JSON: No JSON object could be decoded
JSON received: {"testMeta":
✖ Deployment failed.

所以看起来即使变量被替换为实际提交 ID(如上面代码第二行末尾所示),无论出于何种原因,它都未被识别为有效 JSON。知道我做错了什么吗?

如果问题与 JSON 有关,您可以尝试 aws sync --metadata Shorthand Syntax:

EXTRA_ARGS: "--size-only --exclude=README.md --metadata testMeta=$BITBUCKET_COMMIT"

这样行吗?

或尝试:

EXTRA_ARGS: "--size-only --exclude=README.md --metadata '{\"testMeta\": \"$BITBUCKET_COMMIT\"}'"

注意元数据参数周围的额外 '(通过 Google "aws sync metadata" > )。