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

问题描述:

我试图创建一个内部功能的任务:如何在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') 
    } 
} 

但这gves我一个例外:java.lang.NoSuchMethodError:没有这样的DSL方法“BuildAndCopyMibsHere”步骤中发现

有没有什么方法可以在Pipline脚本中使用嵌入式函数?

的,你不应该添加$当你的字符串(例外是$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) 
} 
... 

,为您的问题,第二个函数有两个参数,而你只在调用中提供一个参数,无论你在通话提供两个参数:

... 
node { 
    stage('Prepare Mib'){ 
     BuildAndCopyMibsHere('project1', null) 
    } 
} 

...或者你需要一个默认值添加到职能的第二个主张nt:

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

好的。现在它说'java.lang.UnsupportedOperationException:必须指定具有接口java.util.List'的实现的$ class。 P.S.原始代码更正 - $替换的地方没有字符串。 –

+1

奇怪,看起来像是一个单独的问题,尝试使用片段生成器来重新生成复制人工制品步骤。如果它仍然失败,我会建议发布一个新问题,因为这是一个单独的问题。 –

解决!致电build job: project, parameters: params失败,出现错误java.lang.UnsupportedOperationException: must specify $class with an implementation of interface java.util.Listparams = [:]。用params = null代替它解决了这个问题。 这里的工作代码如下。

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

def BuildAndCopyMibsHere(projectName, params = null) { 
    build job: project, parameters: params 
    doCopyMibArtefactsHere(projectName) 
} 
node { 
    stage('Prepare Mib'){ 
     BuildAndCopyMibsHere('project1') 
    } 
} 
+0

我的坏,很好,你有最后的错误解决:)我已经更新了我的答案上面。 –

+0

谢谢你正确的方法) –