成功后尝试发送JSON Payload时发生Jenkins管道错误



在最后一个成功阶段之后,我正试图从Jenkins上的管道中发送一个自定义JSON负载,如下所示:

post {
success {
script {
def payload = """
{
"type": "AdaptiveCard",
"body": [
{
"type": "TextBlock",
"size": "Medium",
"weight": "Bolder",
"text": "SonarQube report from Jenkins Pipeline"
},
{
"type": "TextBlock",
"text": "Code was analyzed was successfully.",
"wrap": true,
"color": "Good",
"weight": "Bolder"
}
],
"$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
"version": "1.3"
}"""
httpRequest httpMode: 'POST',
acceptType: 'APPLICATION_JSON',
contentType: 'APPLICATION_JSON',
url: "URL",
requestBody: payload
}
}
}
}

但我收到一个错误

Error when executing success post condition:
groovy.lang.MissingPropertyException: No such property: schema for class: groovy.lang.Binding
at groovy.lang.Binding.getVariable(Binding.java:63)

我使用的是Jenkins可用的HTTP请求插件,JSON负载的格式对MS团队来说是正确的。

这个问题实际上是一个groovy语法错误。你可以很容易地在类似的东西中检查https://groovy-playground.appspot.com/添加您的def payload = ...语句。

groovy中有多种获取多行字符串的方法:

  • 三个单引号字符串
  • 三重双引号字符串
  • 斜弦
  • 娃娃斜绳

除了单引号字符串外,它们还有一个次要属性,即插值

注意到在最初的JSON负载中,有一个"$schema"密钥吗?使用三个双引号字符串使得groovy想要找到一个schema变量,并使用它的值来构造该有效负载变量。

您有两个独立的解决方案:

  1. 使用三重单引号字符串-只需将"""更新为'''
  2. 转义变量-只需将"$schema"更新为"$schema"(使$成为文字$,而不是用作插值前缀(

最新更新