2

我正在尝试将 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()

可以看到, docker实例是在Jenkinsfile中创建的,并传递给builder对象来创建builder。到目前为止,它有效。阶段inside在容器中执行。

现在我想将 Docker 实例的创建转移到 Pipeline 类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: 

所以我的问题是如何在共享库的目标代码中使用docker-workflow 。

4

1 回答 1

0

应该试试 :

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)
}
于 2021-01-22T07:56:44.040 回答