2016-11-30 53 views
-1

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

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

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="[email protected]"> 
<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我需要在这个结尾处,以及与我的配置块中herokuapp显示的内容相匹配的是:

<org.mycompany.myapp.jenkins.plugin.Builder plugin="[email protected]"> 
<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> 

由于这些是我第一次尝试使用configure块,所以我相信我可以用比我所做的更为简洁的方式来做到这一点。但是,在操场上测试表明这应该起作用,但是需要运行的任务被排除在生成的XML之外,我无法弄清楚原因。

回答

0

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

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