我讀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的魔法。 –