Jenkins dsl 配置块生成的 XML 不匹配 API

Jenkins dsl configure block-generated XML doesn't match API

我在 Jenkins 中为我们自己公司的应用程序使用定制插件。在将所有现有的 Jenkins 作业转换为 DSL 脚本时,这意味着我需要使用配置块来包含 运行 使用此插件的任务。我认为我已经正确编写了 DSL 代码,因为当我将它输入 http://job-dsl.herokuapp.com/ 时,它会生成 XML,这与我当前的 config.xml 完全匹配。但是,当我 运行 Jenkins 中的 DSL 脚本并生成作业时,它缺少 XML 的关键块,我不知道为什么。

我在脚本中包含的配置块代码是:

configure { project ->

    project / 'builders' << 'org.mycompany.myapp.jenkins.plugin.Builder' {
      modelOption'modelDownload'
      appOption'appZip'
      execParameters'-debug'
      taskPath 'UnitTests/All.task'
    project / 'builders' / 'tasks' << 'org.mycompany.myapp.jenkins.plugin.Builder_-myappTask' {
      taskPath 'UnitTests/All.task'
    project / 'builders' / 'tasks' / 'parameters'
    }
      modelPath ''
      nexusUrl ''
      nexusUser ''
      nexusPass ''
      myappZipName 'org.mycompany.myapp-win32.win32.x86_64.zip'
    }
      overwriteMyApp ''
  }

正在生成的作业的 config.xml 显示:

<org.mycompany.myapp.jenkins.plugin.Builder plugin="myapp-jenkins-plugin@1.0-SNAPSHOT">
<modelOption>modelDownload</modelOption>
<appOption>appZip</appOption>
<modelPath/>
<nexusUrl/>
<nexusUser/>
<nexusPass/>
<myappZipName>org.mycompany.myapp-win32.win32.x86_64.zip</myappZipName>
<execParameters>-debug</execParameters>
<overwritemyappa>false</overwritemyapp>
</org.mycompany.myapp.jenkins.plugin.Builder>

然而,我需要的 XML 是:

<org.mycompany.myapp.jenkins.plugin.Builder plugin="myapp-jenkins-plugin@1.0-SNAPSHOT">
<modelOption>modelDownload</modelOption>
<appOption>appZip</appOption>
<tasks>
<org.mycompany.myapp.jenkins.plugin.Builder_-myappTask>
<taskPath>UnitTests\All.task</taskPath>
<parameters/>
</org.mycompany.myapp.jenkins.plugin.Builder_-myappTask>
</tasks>
<modelPath/>
<nexusUrl/>
<nexusUser/>
<nexusPass/>
<myappZipName>org.mycompany.myapp-win32.win32.x86_64.zip</myappZipName>
<execParameters>-debug</execParameters>
<overwritemyapp>false</overwritemyapp>
</org.mycompany.myapp.jenkins.plugin.Builder>

因为这是我第一次尝试使用配置块,所以我确信我可以用比我正在做的更简洁的方式来做这件事。但是,在操场上的测试表明这应该可行,但是需要 运行 的任务被排除在生成的 XML 之外,我不明白为什么。

所以经过更多的尝试,现在我已经设法弄清楚如何正确地将子元素传递到配置块中,因此我在这里做错了什么。正确代码如下。

 configure { project ->

    project / 'builders' << 'org.mycompany.myapp.jenkins.plugin.Builder' {
      modelOption'modelDownload'
      appOption'appZip'
      tasks { 
          tasks << 'org.mycompany.myapp.jenkins.plugin.Builder_-myappTask' {
      taskPath 'UnitTests/All.task'
      parameters ''
          }
      }
      modelPath ''
      nexusUrl ''
      nexusUser ''
      nexusPass ''
      appZipName 'org.mycompany.myapp-win32.win32.x86_64.zip'
      execParameters'-debug'
        }
      overwriteMyApp ''
  }