无法将声明性定义的阶段从闭包返回到Jenkins共享库

rkue9o1l  于 2022-11-02  发布在  Jenkins
关注(0)|答案(1)|浏览(180)

我一直致力于创建一个jenkins共享库,它非常适合通用管道模板。最近,我需要将一个额外的用户定义阶段传递到我的通用管道。我使用闭包来实现这一点,但面临着一些问题。我希望闭包返回一个声明性阶段,它有自己的代理。步骤和其他元件,如下列程式码范例所示(请指涉下列影像):
在.jenkinsfile中定义的闭包:Closure defined in .jenkinsfile
从jenkins共享库Call to closure from jenkins shared library调用闭包
错误消息:Error Message
请让我知道如何才能实现上述功能。

pvabu6sv

pvabu6sv1#

使用脚本化管道运行声明性管道脚本。
创建一个包含阶段的类型、操作、内容等的Map。然后在管道中读取并执行Map的内容。
将此管道脚本复制并粘贴到管道作业中(如果需要,请取消选中Groovy Sandbox):

import groovy.transform.TupleConstructor

@TupleConstructor
class Task implements Serializable {
   private static final long serialVersionUID = 1L
   String description
   Closure action
}

// fill the map with contents from any source, e.g. from your declarative pipeline in .jenkinsfile
tasks = [
    new Task(
        description: 'say hello world',
        action: {
            sh "echo hello world"
        }
    )
]

// execute the actions
node('built-in') {
    tasks.each { task ->
        stage("${task.description}") {
            task.action()
        }
    }     
}

相关问题