在Jenkins共享库中使用Docker构建
我正在尝试将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
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()
构造函数。