使用 Groovy markupbuilder 构建简单的网页。在步骤中找不到这样的 DSL 方法 'body'

Using Groovy markupbuilder to build simple web page. No such DSL method 'body' found among steps

我正在尝试使用 HTML 标记构建一个简单的网页,但出现错误:java.lang.NoSuchMethodError:在步骤

中找不到这样的 DSL 方法 'body'

代码:

@NonCPS
def parseJsonForXml(inputJson) {
try {
    def writer = new StringWriter()
    def markup = new MarkupBuilder(writer)
    markup.html {
        body {
            div {
                h1 "Test Page"
            }
        }
    }

Jenkins 做了很多 Groovy 魔术,比如 CPS 转换、自定义方法拦截器等。 简而言之,嵌套关闭器不会像它们应该在 groovy 中那样在标记对象上调用,而是 Jenkins 更改接收器对象并在主脚本上调用它们,因此它检查是否定义了 body DSL 步骤在 Jenkins 和插件中定义的所有 DSL 方法的内部映射中。 为了让它工作改变使调用者对象显式

import groovy.xml.MarkupBuilder

@NonCPS
def parseJsonForXml() {
    def writer = new StringWriter()
    def markup = new MarkupBuilder(writer)
    markup.with {
        html {
            body {
                div {
                    h1 "Test Page"
                }
            }
        }    
    }
    
    return writer.toString()
}
println(parseJsonForXml())

它完全符合您的预期

Running in Durability level: MAX_SURVIVABILITY
[Pipeline] Start of Pipeline
[Pipeline] echo
<html>
  <body>
    <div>
      <h1>Test Page</h1>
    </div>
  </body>
</html>
[Pipeline] End of Pipeline
Finished: SUCCESS