在最后一个成功阶段之后,我正试图从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
变量,并使用它的值来构造该有效负载变量。
您有两个独立的解决方案:
- 使用三重单引号字符串-只需将
"""
更新为'''
- 转义变量-只需将
"$schema"
更新为"$schema"
(使$成为文字$,而不是用作插值前缀(