2017-02-16 45 views
0

在我的jenkinsfile里面我想根据一些依赖关系设置多个属性。Jenkins Groovy扩展属性数组

所以在我jenkinsfile顶部我设置我的第一个参数:

properties([ 
    parameters([ 
    booleanParam(
     defaultValue: false, 
     description: '...', 
     name: 'parameters1' 
    ), 
    ]) 
]) 

有些线路下面我想设置另一个参数,如果满足条件

if(awesomeCondition) { 
    properties([ 
    parameters([ 
     booleanParam(
     defaultValue: false, 
     description: '...', 
     name: 'parameters2' 
    ), 
    ]) 
    ]) 
} 

我的问题现在运行的是第二个参数覆盖第一个参数。如何正确处理这个问题?

回答

2

properties step覆盖现有的作业属性,因此,如您所述,第二个调用覆盖了前一个。这是预期的行为。

你需要做的就是保持新的参数列表,然后使用一个调用properties步:

def newParameters = [] 
newParameters.add([ 
    $class: 'hudson.model.BooleanParameterDefinition', 
    name: "p1", 
    default: false, 
    description:"Some help text" 
]) 
... 
if(awesomeCondition) { 
    newParameters.add([ 
    $class: 'hudson.model.BooleanParameterDefinition', 
    name: "p2", 
    default: false, 
    description:"Some help text" 
    ]) 
} 
... 
properties([parameters(newParameters)]) 

$class: 'hudson.model.BooleanParameterDefinition'是必要的,因为我们正在创建的properties步外的对象。对于其他类型的参数,请参阅this class的子类。

+0

不错,我会明天再试试这个,然后更新这个线程。 – Basti

+1

经过测试和认可。对于读这个的其他人来说,你应该在你的jenkins文件的顶部准备你的参数。稍后添加它们会导致我遇到的问题。 – Basti