Я не знаком с концепцией метакласса, но я думаю, что простое решение вашей проблемы - определить упакованный этап как функцию.
Вот пример того, как бы вы определили такую функцию:
def wrappedStage(name, Closure closure) {
stage(name) {
echo "Beginning of stage"
def result = closure.call()
echo "End of stage"
return result
}
}
и вот как вы бы это назвали:
wrappedStage('myStage') {
echo 'hi'
}
Возвращаемое значение wrappedStage
имеет смысл только тогда, когда тело вашей сцены действительно что-то возвращает, например:
Если вы звоните на другую работу, например:
wrappedStage('myStage') {
build job: 'myJob'
}
вы получите обратно org.jenkinsci.plugins.workflow.support.steps.build.RunWrapper
, который вы можете использовать для доступа к информации о работе, которую вы выполняете, например, результат, переменные и т. Д.
Если вы печатаете что-то на консоли, например:
wrappedStage('myStage') {
echo 'hi'
}
ты вернешься null
.
Обратите внимание, что в моем примере я не печатаю аргументы, потому что, как я понимаю stage
, он принимает только 2 аргумента; сценическое имя и закрытие, которое это должно бежать. Название этапа уже будет напечатано в журнале, и я не знаю, какую выгоду вы получите от печати кода, который собираетесь выполнить, но если это то, что вы хотите сделать, посмотрите на это .
Если у вас есть более конкретный пример того, что вы хотите обернуть, вы можете добавить дополнительные параметры в обертку и распечатать всю необходимую информацию через эти дополнительные параметры.