在jenkins管道中重用groovy对象/类-共享库

mlmc2os5  于 2022-11-01  发布在  Jenkins
关注(0)|答案(1)|浏览(175)

我正在尝试在共享库中为多个项目重用groovy类。为此我创建了一个简单的Image类,它可以通过给定的图像名称、版本等来构建、标记和推送容器图像。
图像对象的示例化工作正常,我可以调用build方法而没有任何问题。但是我想把对象传递到jenkinsfile中的另一个阶段,这会导致下面的错误消息:

hudson.remoting.ProxyException: groovy.lang.MissingMethodException: No signature of method: com.Image.$() is applicable for argument types: (org.jenkinsci.plugins.workflow.cps.CpsClosure2) values:

有什么方法可以传递对象吗?

Jenkinsfile构建阶段:

stage('building base container image with python') {
        when {
            anyOf { expression {return params.BuildBaseImages} }
        }
        steps {
            script{ 
            base_python = new Image(this, "${params.PYTHON_DOCKER_IMAGE_NAME}","${params.PYTHON_VERSION}", "centos7_baseimage_python/")
            base_python.build()
            alert.success "${params.PYTHON_DOCKER_IMAGE_NAME} builded"
            }
        }

        post {
            failure {
                error 'failed'
            }
        }
    }

Jenkinsfile标记阶段:

stage('tag base image') {
        when {
            anyOf { expression {return params.BuildBaseImages} }
        }
                steps {
                    script {
                    base_python = base_python.tag("${DOCKER_IMAGE_FOLDER}${params.PYTHON_DOCKER_IMAGE_NAME}${params.PYTHON_VERSION}","${DOCKER_REGISTRY}") 
                    }
                }
    }
fafcakar

fafcakar1#

如果你想在不同的阶段使用变量,你需要全局声明它们,例如检查下面的。

// Global variable declaration
def base_python

pipeline {
    agent any
    stages {
        stage('Initialize') {      
             steps {
                 script {
                    base_python = new Image(this, "${params.PYTHON_DOCKER_IMAGE_NAME}","${params.PYTHON_VERSION}", "centos7_baseimage_python/")  
               }
            }
        }
        stage('Use') {    
                 steps {
                    script {
base_python.tag("${DOCKER_IMAGE_FOLDER}${params.PYTHON_DOCKER_IMAGE_NAME}${params.PYTHON_VERSION}","${DOCKER_REGISTRY}")              
                    }
            }
        }
    }
}

相关问题