0

我正在尝试使用 HTML 标记构建一个简单的网页,但出现错误:java.lang.NoSuchMethodError: No such DSL method 'body' found between steps

代码:

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

1 回答 1

0

Jenkins 做了很多 Groovy 魔术,例如 CPS 转换、自定义方法拦截器等。简而言之,嵌套关闭器不会像在 groovy 中那样在标记对象上调用,而是 Jenkins 更改接收器对象并在主对象上调用它们脚本,因此它检查是否在 Jenkins 和插件中定义的所有 DSL 方法的内部映射中定义了主体 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
于 2021-05-05T23:56:20.403 回答