如何在Jenkins Pipeline配置中定义和使用函数?

Dr.*_*eel 34 groovy jenkins jenkins-pipeline

我正在尝试用里面的函数创建一个任务:

def doCopyMibArtefactsHere(projectName) {
    step ([
        $class: 'CopyArtifact',
        projectName: $projectName,
        filter: '**/**.mib',
        fingerprintArtifacts: true, 
        flatten: true
    ]);
}

def BuildAndCopyMibsHere(projectName, params) {
    build job: $project, parameters: $params
    doCopyMibArtefactsHere($projectName)
}


node { 
    stage('Prepare Mib'){
        BuildAndCopyMibsHere('project1')
    }
}
Run Code Online (Sandbox Code Playgroud)

但是这给我一个例外:java.lang.NoSuchMethodError:在步骤中找不到这样的DSL方法'BuildAndCopyMibsHere'

有没有办法在Pipline脚本中使用嵌入式功能?

Jon*_*n S 30

首先,$当你在字符串之外时不应该添加(例外是$class你的第一个函数,所以它应该是:

def doCopyMibArtefactsHere(projectName) {
    step ([
        $class: 'CopyArtifact',
        projectName: projectName,
        filter: '**/**.mib',
        fingerprintArtifacts: true, 
        flatten: true
    ]);
}

def BuildAndCopyMibsHere(projectName, params) {
    build job: project, parameters: params
    doCopyMibArtefactsHere(projectName)
}
...
Run Code Online (Sandbox Code Playgroud)

现在,至于你的问题,第二个函数接受两个参数,而你只在调用时提供一个参数.您必须在通话时提供两个参数:

...
node { 
    stage('Prepare Mib'){
        BuildAndCopyMibsHere('project1', null)
    }
}
Run Code Online (Sandbox Code Playgroud)

...或者你需要在函数的第二个参数中添加一个默认值:

def BuildAndCopyMibsHere(projectName, params = null) {
    build job: project, parameters: params
    doCopyMibArtefactsHere($projectName)
}
Run Code Online (Sandbox Code Playgroud)