如何在DSL中通过类创建配置块

时间:2016-10-19 08:06:24

标签: jenkins-job-dsl

我想创建一个将配置块添加到自由式作业的类

我尝试了以下代码

class BuildFramework {
    static myConfiguration(dslFactory, product, version, owner) {
      dslFactory.configure { project ->
        project / 'properties' / 'com.xxx.hudson.plugins.standard.AdditionalJobProperties'{
        productField(product)
        versionField(version)
        ownersField(owner)
        }
     }
  }
}

freeStyleJob("my_job")
{
     BuildFramework.myConfiguration(this, 'XXX', '10.4.6', 'root' )
}

我收到以下错误:

处理提供的DSL脚本 错误:(脚本,第3行)没有方法签名:script.configure()适用于参数类型:(BuildFramework $ _myConfiguration_closure1)值:[BuildFramework $ _myConfiguration_closure1 @ 6bf9cbc5]

2 个答案:

答案 0 :(得分:0)

configure方法在DSL工厂的顶层不可用,它只能在作业环境中使用,例如:在freeStyleJob内。

class BuildFramework {
  static Closure myConfiguration(product, version, owner) {
    return { project ->
      project / 'properties' / 'com.xxx.hudson.plugins.standard.AdditionalJobProperties'{
        productField(product)
        versionField(version)
        ownersField(owner)
      }
    }
  }
}

freeStyleJob('example') {
  configure BuildFramework.myConfiguration('XXX', '10.4.6', 'root')
}

有关详细信息,请参阅Job DSL wiki:https://github.com/jenkinsci/job-dsl-plugin/wiki/The-Configure-Block#reusable-configure-blocks

答案 1 :(得分:0)

我发现了问题 第一个是“所有者”参数名称有问题 第二个是我需要将“it”而不是“this”传递给函数。

class BuildFramework {
   static myConfiguration(dslFactory, product, version, a_owner) {
      dslFactory.configure { project ->
         project / 'properties' / 'com.xxx.hudson.plugins.standard.AdditionalJobProperties'{
           productField(product)
           versionField(version)
           ownersField(a_owner)
      }
    }
  }
}

freeStyleJob("my_job")
{
     BuildFramework.myConfiguration(it, 'XXX', '10.4.6', 'root' )
}