gpt4 book ai didi

json - 无法将 `json` 字符串传递到 Jenkins 管道中的 `sh` 步骤

转载 作者:行者123 更新时间:2023-12-02 20:32:25 25 4
gpt4 key购买 nike

我正在尝试使用 awscli 重新标记 Amazon ECR 上的 docker 镜像。但是当我将 json 字符串传递给 sh 步骤时,我收到错误无效的 JSON 语法。当我记录 json 字符串时,键和值周围的双引号不存在。我假设groovy's string interpolation规则正在剥离引号?下面的代码反射(reflect)了 awscli文档中包含每个命令的 sh 步骤。

script {
MANIFEST = sh(
returnStdout: true,
script: "aws ecr batch-get-image --repository-name amazonlinux --image-ids imageTag=latest --query images[].imageManifest --output text"
).trim()
sh """ aws ecr put-image --repository-name amazonlinux --image-tag 2017.03 --image-manifest \\"$MANIFEST\\" """
}

返回错误

[test] Running shell script
+ aws ecr put-image --repository-name amazonlinux --image-tag 2017.03 --image-manifest "{

An error occurred (InvalidParameterException) when calling the PutImage operation: Invalid parameter at 'ImageManifest' failed to satisfy constraint: 'Invalid JSON syntax'

我尝试使用groovy.json.JsonOutput但没有成功。它打印带有转义引号和换行符的字符串 {\n\"schemaVersion\": 2,\n\"mediaType\": ...

import groovy.json.JsonOutput
...
script {
def MANIFEST = sh(
returnStdout: true,
script: "aws ecr batch-get-image --repository-name amazonlinux --image-ids imageTag=latest --query images[].imageManifest --output text"
).trim()
def json = JsonOutput.toJson(MANIFEST)
echo JsonOutput.prettyPrint(json)
sh """ aws ecr put-image --repository-name amazonlinux --image-tag 2017.03 --image-manifest \\"$json\\" """
}

[编辑]刚刚注意到,如果我将最后一行更改为 returnStdout ,它会将命令显示为 aws ecr put-image --repository-name amazonlinux --image-tag 2017.03 -- image-manifest "{\n "schemaVersion": 2,\n "mediaType": ... 这意味着 JsonOutput 中的引号正在工作,但它添加了新行?要尝试删除新行并看看会发生什么。

最佳答案

是的,引号被悄悄删除。你可以引用这个页面,它以非常详细的方式显示了字符的转义: https://gist.github.com/Faheetah/e11bd0315c34ed32e681616e41279ef4

关于json - 无法将 `json` 字符串传递到 Jenkins 管道中的 `sh` 步骤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48273320/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com