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