2016-06-14 14 views
0

を使ってすべてのジョブのジョブタイムアウトを設定するにはHow can I set the job timeout using the Jenkins DSLを読んでください。 1つのジョブのタイムアウトが設定されます。私はすべてのジョブに対して、わずかに異なる設定(150%、10ジョブ以上の平均化、最大30分)を設定したいと考えています。私はこの構文を使用する必要がありますrelevant job-dsl-plugin documentationによるとJenkins DSL

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) 
} 

これも機能し、すべてのジョブ名がコンソールに出力されます。


ここではすべて一緒に接続したいと思います。私はこのコードをプッシュすると、ジェンキンスは、DSLシードジョブを実行するとき、私はこのエラーを取得する

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') 
     } 
    } 
    } 
} 

:これは私が使用する完全なコードです

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

は、私はここで間違って何をしているのですか?

答えて

1

Job-DSLプラグインは、以前にそのプラグインによって作成されたジョブを維持するためにのみ使用できます。他の方法で作成されたジョブの設定を変更しようとしています。これは機能しません。

は、既存のジョブの大量修正(のような、あなたのケースでは、タイムアウトを追加する)ための最も簡単な方法は、ディスク上の​​3210ファイルを変更することにより、

  • いずれかで、直接ジョブのXML仕様を変更することで、またはRESTまたはCLI API

xmlstarletを使用して

  • は、シェルレベルで直接そのようなタスクを実行するための強力なツールです。

    また、スクリプトコンソールからGroovyスクリプトを使用して変更を行うこともできますが、そのためにはJenkinsの内部動作とデータ構造を理解する必要があります。

  • +0

    ありがとうございます。私は、Job-DSLプラグインがそのプラグインによって作成されたジョブしか維持できないと述べた文書は見つかりませんでした。率直に言って、それは私の使い勝手を厳しく制限しています。 xmlstarletを提案していただきありがとうございます、私は過去にそれを使用しました。あるいは、私はちょうどgrep&sedの魔法を適用します。 –

    関連する問題