jq 无法在 jenkins 管道中使用冒号设置值
jq fails to set value with colon in jenkins pipeline
我的詹金斯管道需要操作 .updateApp.json 并将包含 冒号 的 S3 存储桶的名称设置为键 BucketARNUpdate
的值
目前为止我尝试过的:
arn = "arn:aws:s3:::${PROJECT}-${STAGE}"
sh(script: 'jq ".BucketARNUpdate=${arn}" .updateApp.json', returnStdout: true)
但这给了我
jq: error: syntax error, unexpected ':' (Unix shell quoting issues?) at <top-level>, line 1:
我的第二种方法是使用 --arg 参数,我试过了
sh(script: 'jq --arg var \"${arn}\" ".BucketARNUpdate=${var}" .updateApp.json', returnStdout: true)
但这给出了
groovy.lang.MissingPropertyException: No such property: var
我在转义和不转义 var
值的情况下都进行了尝试。我该如何做对?
如果键名是字母数字,则只能使用缩写形式.foo
,理解这里_算作字母字符。
引用名为“KEY”的键的值的基本形式是 .["KEY"]
,但最新版本的 jq 也允许 ."KEY"
.
使用您的第一种方法并忽略 jenkins 可能需要的任何转义,您可以这样写:
".[\"BucketARNUpdate=${arn}\"]"
但是,您的第二种方法可能更安全。再次忽略 jenkins 可能需要的任何转义,调用将如下所示:
jq --arg var "${arn}" '.["BucketARNUpdate=" + $var]' .updateApp.json
我的詹金斯管道需要操作 .updateApp.json 并将包含 冒号 的 S3 存储桶的名称设置为键 BucketARNUpdate
目前为止我尝试过的:
arn = "arn:aws:s3:::${PROJECT}-${STAGE}"
sh(script: 'jq ".BucketARNUpdate=${arn}" .updateApp.json', returnStdout: true)
但这给了我
jq: error: syntax error, unexpected ':' (Unix shell quoting issues?) at <top-level>, line 1:
我的第二种方法是使用 --arg 参数,我试过了
sh(script: 'jq --arg var \"${arn}\" ".BucketARNUpdate=${var}" .updateApp.json', returnStdout: true)
但这给出了
groovy.lang.MissingPropertyException: No such property: var
我在转义和不转义 var
值的情况下都进行了尝试。我该如何做对?
如果键名是字母数字,则只能使用缩写形式.foo
,理解这里_算作字母字符。
引用名为“KEY”的键的值的基本形式是 .["KEY"]
,但最新版本的 jq 也允许 ."KEY"
.
使用您的第一种方法并忽略 jenkins 可能需要的任何转义,您可以这样写:
".[\"BucketARNUpdate=${arn}\"]"
但是,您的第二种方法可能更安全。再次忽略 jenkins 可能需要的任何转义,调用将如下所示:
jq --arg var "${arn}" '.["BucketARNUpdate=" + $var]' .updateApp.json