jenkins管道def新的字符串参数

时间:2016-12-11 17:27:31

标签: jenkins groovy jenkins-pipeline

我有一个带管道的参数化作业。 例如:预定义字符串参数: IP 我试图在管道中定义一个新的String,以便在我调用另一个"构建作业时使用它作为新参数。

我尝试过以下方法:

import hudson.model.*
node('master'){
if(ipaddr =='192.168.1.1'){
    def parameter = new StringParameterValue("subnet", '255.255.255.0') //not working
    echo parameter //not working
}

stage ('Stage A'){
    build job: 'jobA', parameters:
 [
  [$class: 'StringParameterValue', name: 'ip', value: ip],
  [$class: 'StringParameterValue', name: 'subnet', value: subnet] //not working
 ]
}
}

这种方式不起作用,我收到错误:

  

脚本不允许使用新的hudson.model.StringParameterValue

改变行后

def parameter = new StringParameterValue("subnet", '255.255.255.0') 

为:

subnet = '255.255.255.0'

我收到了错误:

  

groovy.lang.MissingPropertyException:没有这样的属性:subnetmask for   class:groovy.lang.Binding。

我无法使用预定义参数 ip 调用新作业,新参数子网

没有子网它正在运作

如何在管道中定义新的String参数?

jenkins版本:2.19.4

2 个答案:

答案 0 :(得分:3)

如果你只是避免实例化def subnet = "" if(ipaddr == '192.168.1.1') { subnet = '255.255.255.0' echo subnet } stage ('Stage A'){ build job: 'jobA', parameters: [ [$class: 'StringParameterValue', name: 'ip', value: ipaddr], [$class: 'StringParameterValue', name: 'subnet', value: subnet] ] } ,你可以让它工作,因为正如David M. Karr提到的管道沙箱是非常严格的。相反,只需在调用作业时使用简单变量,如下所示:

{{1}}

非常简单,StringParameterValue params期望传递String,所以只要你传递字符串值就应该没问题!

答案 1 :(得分:0)

默认情况下,管道作业执行的沙箱非常受限制。您必须在找到它们时覆盖安全限制。转到“管理Jenkins”和“进程内脚本批准”。您应该在列表中看到发生的最后一次违规。选择它进行审批并重新运行脚本。