转义Jenkins Groovy脚本中的引号和括号->shell ->curl

5w9g7ksd  于 2022-11-01  发布在  Jenkins
关注(0)|答案(1)|浏览(285)

我需要使用有效负载进行API调用(一切都需要完全一样)

{"file": "//'HLQ.DATASET(MEMBER)'"}

Jenkins管道中。我不能正确地计算有效负载的转义。问题是圆括号,单转义- Groovy抱怨,双转义-其中一个斜杠一直冒泡到curl调用。

def String job = """{\\"file\\": \\"\\'HLQ.DATASET\\(MEMBER\\)\\'\\"}"""
...
script {
 def String response = sh(script: " curl -X PUT -w %{http_code} -v --header 'Content-Type: application/json' --cookie cookies.txt --header 'X-CSRF-ZOSMF-HEADER: dummy' --header 'X-IBM-Notification-URL: ${hook.getURL()}' https://.../zosmf/restjobs/jobs --data '$job'", returnStdout: true).trim()
}
oyt4ldly

oyt4ldly1#

如果您正在检查Jenkins控制台输出以确定消息是否正确发送,这可能会误导您。您在控制台输出中看到的并不总是经过解释的字符串。
你可以尝试类似下面这样的方法吗?同样为了检查Curl发送了什么,你可以使用像--trace这样的标志

def job = "{\"file\": \"//'HLQ.DATASET(MEMBER)'\"}"
writeFile(file: 'payload.txt', text: job)
sh 'cat payload.txt'
def String response = sh(script: "curl -X PUT -w %{http_code} -v --header 'Content-Type: application/json' --cookie cookies.txt --header 'X-CSRF-ZOSMF-HEADER: dummy' --header 'X-IBM-Notification-URL: ${hook.getURL()}' https://.../zosmf/restjobs/jobs --data @payload.txt", returnStdout: true).trim()

相关问题