2016-06-14 46 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的魔法。 –