YAML_FILE_ERROR:找不到预期的密钥

时间:2020-10-16 14:42:12

标签: json yaml aws-codebuild pyyaml

我尝试使用aws codeBuild运行Buildspec,并尝试使用jq命令即时生成process.json文件。但是在执行和构建失败时会出现错误。

build: 
              commands:
                - cp $CODEBUILD_SRC_DIR/qe/performance/* apache-jmeter-5.2/bin/
                - cd apache-jmeter-5.2/bin/
                - DATE=`date "+%Y%m%d-%H-%M-%S"`
                - aws s3 cp $DATE-Report s3://$JMeterScanResultBucket/${ProjectName}/$DATE --recursive
                - jq -n --arg appname "$appname" '{apps: [ {project: wsg, issuetype: "Test Execution", summary: "Test Execution for junit Execution"}]}' > process.json

但是,我收到以下错误:第20行转到“ jq”命令上方

DOWNLOAD_SOURCE 
Failed
YAML_FILE_ERROR: did not find expected key at line 20

1 个答案:

答案 0 :(得分:0)

YAML中的冒号加空格(或换行符)表示它是映射中的键/值对:

key: value

您的jq命令包含多个冒号,后跟空格。

由于您需要单个字符串,因此必须将其引号。

在YAML中有几种方法可以做到这一点。

此处单引号或双引号并不理想,因为字符串包含两种引号类型。

在这里folded block scalar可能是最好的解决方案。换行符将作为空格折叠在一起。

- >
  jq -n --arg appname "$appname"
  '{apps: [ {project: wsg, issuetype: "Test Execution",
  summary: "Test Execution for junit Execution"}]}'
  > process.json

另一种选择是literal block scalar,您必须像在shell脚本中那样避开换行符:

- |
  jq -n --arg appname "$appname" \
  '{apps: [ {project: wsg, issuetype: "Test Execution", \
  summary: "Test Execution for junit Execution"}]}' \
  > process.json