2016-06-14 103 views
0

我读How can I set the job timeout using the Jenkins DSL。这为一份工作设定了超时时间。我想为所有工作设置它,并设置稍微不同的设置:150%,平均超过10个工作,最多30分钟。如何使用Jenkins DSL设置所有作业的作业超时

按照relevant job-dsl-plugin documentation我应该用这样的语法:

job('example-3') { 
    wrappers { 
     timeout { 
      elastic(150, 10, 30) 
      failBuild() 
      writeDescription('Build failed due to timeout after {0} minutes') 
     } 
    } 
} 

http://job-dsl.herokuapp.com/测试,这是相关的XML部分:

<buildWrappers> 
    <hudson.plugins.build__timeout.BuildTimeoutWrapper> 
     <strategy class='hudson.plugins.build_timeout.impl.ElasticTimeOutStrategy'> 
      <timeoutPercentage>150</timeoutPercentage> 
      <numberOfBuilds>10</numberOfBuilds> 
      <timeoutMinutesElasticDefault>30</timeoutMinutesElasticDefault> 
     </strategy> 
     <operationList> 
      <hudson.plugins.build__timeout.operations.FailOperation></hudson.plugins.build__timeout.operations.FailOperation> 
      <hudson.plugins.build__timeout.operations.WriteDescriptionOperation> 
       <description>Build failed due to timeout after {0} minutes</description> 
      </hudson.plugins.build__timeout.operations.WriteDescriptionOperation> 
     </operationList> 
    </hudson.plugins.build__timeout.BuildTimeoutWrapper> 
</buildWrappers> 

我有工作手动之前,我编辑的验证,并且XML是正确的。所以我知道Jenkins的DSL语法是正确的。


现在我想将其应用于所有工作。首先,我想列出所有的作业名称:

import jenkins.model.* 

jenkins.model.Jenkins.instance.items.findAll().each { 
    println("Job: " + it.name) 
} 

这工作太,所有的作业名称打印到控制台。


现在我想将它们连接在一起。这是一个完整的代码,我使用:

import jenkins.model.* 

jenkins.model.Jenkins.instance.items.findAll().each { 
    job(it.name) { 
    wrappers { 
     timeout { 
     elastic(150, 10, 30) 
     failBuild() 
     writeDescription('Build failed due to timeout after {0} minutes') 
     } 
    } 
    } 
} 

当我按这个代码和詹金斯运行DSL种子的工作,我得到这个错误:

ERROR: Type of item "jobname" does not match existing type, item type can not be changed 

什么我错在这里做什么?

回答

1

Job-DSL插件只能用于维护之前由该插件创建的作业。您正试图修改以其他方式创建的作业配置 - 这不起作用。

对于现有就业岗位的质量改进(比如,你的情况,加上超时)最简单的方法是直接更改任务的XML规范,

  • 通过更改磁盘上的​​3210文件,或
  • 使用REST或CLI API

xmlstarlet是直接在外壳水平执行所述任务的有力工具。

或者,可以通过“脚本控制台”中的Groovy脚本执行更改 - 但为此,您需要对Jenkins的内部工作原理和数据结构有所了解。

+0

谢谢。我没有找到任何说明Job-DSL插件只能维护由该插件创建的作业的文档。坦率地说,这严重限制了我的可用性。感谢您提供xmlstarlet,我过去曾经使用它。或者,也许我只会使用一些grep和sed的魔法。 –