Хотя это относится к коду Jenkins, я думаю, что в более общем плане этот вопрос касается особенностей метапрограммирования Groovy.
Вот как выглядят мои тесты:
// MyDeclarativePipelineTest.groovy
class MyDeclarativePipelineTest extends DeclarativePipelineTest {
@Override
@Before
public void setUp() throws Exception {
super.setUp();
helper.registerAllowedMethod("parameters", [ArrayList.class], null)
}
}
// someTests.groovy
class someTests extends MyDeclarativePipelineTest {
@Override
@Before
public void setUp() throws Exception {
super.setUp();
}
@Test
public void pipeline_should_execute_without_errors() throws Exception {
addParam('MYPARAM', 'sdfsdfsdf')
def script = loadScript("Jenkinsfile")
script.run()
assertJobStatusSuccess()
}
}
// Jenkinsfile
pipeline {
stages {
stage('Build') {
steps {
If(true) {print("sdfsdfsd")} // should fail because not wrapped in script{} step
echo 'Building..'
}
}
}
}
Я использую эту библиотеку в своих тестах Spock: JenkinsPipelineUnit
Я хочу переопределить замыкание steps{} в моем классе MyDeclarativePipelineTest
Закрытие шагов определено в этом классе StageDeclaration.groovy
StageDeclaration используется в классе GenericPipelineDeclaration следующим образом:
def stage(String name,
@DelegatesTo(strategy = DELEGATE_FIRST, value = StageDeclaration) Closure closure) {
this.stages.put(name, createComponent(StageDeclaration, closure).with { it.name = name; it })
}
И затем, наконец, GenericPipelineDeclaration используется в DeclarativePipelineTest следующим образом:
def pipelineInterceptor = { Closure closure ->
GenericPipelineDeclaration.binding = binding
GenericPipelineDeclaration.createComponent(DeclarativePipeline, closure).execute(delegate)
}
Я расширяю DeclarativePipelineTest своим собственным классом MyDeclarativePipelineTest
Можно ли переопределить закрытие шагов внутри MyDeclarativePipelineTest? Я хочу, чтобы он выдавал ошибку, если необработанный код Groovy определен в замыкании steps{}
, которое не заключено в замыкание script{}
.
Быстрое напоминание rd888 о том, что ваша орфография нуждается в исправлении почти в каждом сообщении. Могу я побеспокоить вас, чтобы вы начали использовать проверку орфографии?
не уверен, что это будет полезно для вас: ideone.com/9Jgbis Я действительно не могу понять, почему @Override здесь не решение.