Нет такого "стиля" метода DLS (MarkupBuilder)

Я пытаюсь создать строку в формате html, чтобы отправить ее по электронной почте в jenkins-pipeline. У меня есть следующий фрагмент кода:

import groovy.xml.MarkupBuilder

def writer = new StringWriter()
def html = new MarkupBuilder( writer )

html.table( class: "squishSummary" ) {
    style( type: "text/css" ) {
        mkp.yield( getTableStyle() )
    }
    ...
}

def getTableStyle() {
    ....
}

К сожалению, это приводит к ошибке при выполнении конвейера: java.lang.NoSuchMethodError: No such DSL method 'style' found among steps [...] Если я правильно понимаю, jenkins-server пытается выполнить команду style как шаг сборки jenkins, что разумно терпит неудачу. Как я могу это исправить?

"DevOps: Jenkins & AWS Series, часть 5: Установка Gradle на Ubuntu 22.04
"DevOps: Jenkins & AWS Series, часть 5: Установка Gradle на Ubuntu 22.04
В этой статье блога мы проведем вас через процесс установки Gradle на Ubuntu 22.04, интеграции его с Jenkins и создания задания Gradle. Мы...
0
0
509
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

следующий код работает нормально:

import groovy.xml.MarkupBuilder

def writer = new StringWriter()
def html = new MarkupBuilder( writer )

html.table( class: "squishSummary" ) {
    style( type: "text/css" ) {
        mkp.yield("123")
    }
}
println writer

однако, если вы объявите переменную с именем style, вы получите ошибку, аналогичную вашей.

поэтому этот код не сработает с groovy.lang.MissingMethodException: No signature of method ...

import groovy.xml.MarkupBuilder

def writer = new StringWriter()
def html = new MarkupBuilder( writer )

def style = "my style1" //just add this line and code fails

html.table( class: "squishSummary" ) {
    style( type: "text/css" ) {
        mkp.yield("123")
    }
}

println writer

для решения проблемы используйте delegate или GString вместо простого имени метода:

import groovy.xml.MarkupBuilder

def writer = new StringWriter()
def html = new MarkupBuilder( writer )

def style = "style1"

html.table( class: "squishSummary" ) {
    delegate.style( type: "text/css" ) {
        mkp.yield("123")
    }
    //or like this:
    "${'style'}"( type: "text/css" ) {
        mkp.yield("123")
    }
}

println writer

Другие вопросы по теме