Jenkins Groovy扩展了属性数组

时间:2017-02-16 14:51:43

标签: arrays jenkins groovy parameters properties

在我的jenkinsfile中,我想根据一些依赖项设置多个属性。

所以在我的jenkins文件的顶部我设置了我的第一个参数:

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

如果满足条件,我想在下面的一些行中设置另一个参数

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

我现在遇到的问题是第二个参数覆盖了第一个参数。如何正确处理?

1 个答案:

答案 0 :(得分:2)

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

您需要做的是保留一个新参数列表,然后使用一次调用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的子类。