在Jenkins共享库中使用Docker构建

在Jenkins共享库中使用Docker构建,jenkins,groovy,jenkins-pipeline,jenkins-docker,Jenkins,Groovy,Jenkins Pipeline,Jenkins Docker,我正在尝试将Jenkins管道定义为(共享)对象,就像这样。但是我想添加在docker容器中运行构建操作的功能 我的Jenkinsfile的工作原理如下: @Library('ci-scons-jenkins') _ def image = docker.image("praqma/native-scons") org.ipiq.buildci.scons.SConsPipeline.builder(this, steps, image).buildDefaultPipeline().exec

我正在尝试将Jenkins管道定义为(共享)对象,就像这样。但是我想添加在docker容器中运行构建操作的功能

我的
Jenkinsfile
的工作原理如下:

@Library('ci-scons-jenkins') _

def image = docker.image("praqma/native-scons")
org.ipiq.buildci.scons.SConsPipeline.builder(this, steps, image).buildDefaultPipeline().execute()
如您所见,将在Jenkins文件中创建,并将其传递给构建器对象以创建构建器。到目前为止,它是有效的。在容器内部执行阶段

现在我想将Docker实例的创建转移到管道类
SconsPipeline.groovy
。我试着这样做:

// I hoped it would import `Docker`
import org.jenkinsci.plugins.docker.workflow.*

class SConsPipeline implements Serializable {

    def script
    def stages
    def image
    DSL steps

    static builder(script, DSL steps) {
        // create the image to use in this build instead of using a parameter
        def docker = Docker(script)
        image = docker.image("praqma/native-scons")
        return new Builder(script, steps, image)
    }
但是Jenkins没有找到正确的对象:

groovy.lang.MissingMethodException: No signature of method: java.lang.Class.Docker() is applicable for argument types: (WorkflowScript) values: 
因此,我的问题是如何在共享库中的目标代码内部使用。

应该尝试:

import org.jenkinsci.plugins.docker.workflow.*
import org.jenkinsci.plugins.workflow.cps.CpsScript


static builder(script, DSL steps) {
    // create the image to use in this build instead of using a parameter
    def docker script.getClass().getClassLoader().loadClass("org.jenkinsci.plugins.docker.workflow.Docker").getConstructor(CpsScript.class).newInstance(script);
    image = docker.image("praqma/native-scons")
    return new Builder(script, steps, image)
}

我的第一个猜测是插件没有正确导入,或者您没有从插件中的类实例化一个对象以在方法中调用。感谢您的响应。从我得到的错误来看,似乎是这样的。我浏览了的源代码,但没有看到问题所在。无论如何,我在Groovy和Jenkins面前还有一条很长的路要走,所以我希望最后我会发现我的错误。谢谢,BR。事实上,再看一眼,你似乎都做对了。您真正的问题似乎是使用不正确的输入类型调用
Docker()
构造函数。