0

I want to create class that will add configure block to freestyle job

I tried the below code

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' )
}

I get the below error:

Processing provided DSL script ERROR: (script, line 3) No signature of method: script.configure() is applicable for argument types: (BuildFramework$_myConfiguration_closure1) values: [BuildFramework$_myConfiguration_closure1@6bf9cbc5]

Shurik
  • 562
  • 1
  • 7
  • 19

2 Answers2

0

The configure method is not available on top-level in the DSL factory, it's only available within a job context, e.g. within 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')
}

See the Job DSL wiki for details: https://github.com/jenkinsci/job-dsl-plugin/wiki/The-Configure-Block#reusable-configure-blocks

daspilker
  • 8,154
  • 1
  • 35
  • 49
0

I found the problem.
The first one is that "owner" parameter name is problematic.
The second is I need to pass "it" instead of "this" to the function.

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' )
}
Shurik
  • 562
  • 1
  • 7
  • 19