jenkins - 有没有办法覆盖 Spock 测试中的闭包?
问题描述
虽然这是针对 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
我想在 MyDeclarativePipelineTest 类中覆盖 steps{} 闭包
步骤闭包在此类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 })
}
最后在DeclarativePipelineTest中使用 GenericPipelineDeclaration,如下所示:
def pipelineInterceptor = { Closure closure ->
GenericPipelineDeclaration.binding = binding
GenericPipelineDeclaration.createComponent(DeclarativePipeline, closure).execute(delegate)
}
我正在用我自己的类 MyDeclarativePipelineTest 扩展 DeclarativePipelineTest
有没有办法可以覆盖 MyDeclarativePipelineTest 内部的步骤关闭?steps{}
如果未包装在闭包中的闭包中定义了原始 Groovy 代码,我希望它抛出错误script{}
。
解决方案
推荐阅读
- jinja2 - 如何按内部列表中的第一项过滤列表列表?
- android - Firebase Phone Auth 不适用于 React Native 应用程序(reCAPTCHA 后屏幕保持白色)
- regex - 正则表达式从 PostgreSQL 11.0 中的列中捕获值
- python - Python:如何在 Selenium 中获取当前鼠标坐标?
- woocommerce - 我如何使这个角色具体化?
- visual-studio-code - VS Code 调试器到达第一个断点的速度极慢
- python - 变量在函数 python 中不起作用(我的代码有什么问题)
- sql - 在存储过程中设置事务级别时,被调用的过程是否保持相同的事务级别?
- javascript - 模具生命周期方法不渲染
- android - 使用 ContentResolver 将图片保存到 Picutes 子文件夹并防止被图库扫描