Я прочитал 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. –