2017-08-29 4 views
2

結果:ジェンキンスマルチジョブはfilnaly私はマルチジョブ構造を有する

Master MultiJob Project (Job) 
|----- Phase 1 
      |------> JOB A 
      |------> JOB D 
|----- Phase 2 
      |------> JOB B 
      |------> JOB D 
|----- Phase 2 
      |------> JOB C 

ジョブDは常に失敗しているが、それがこのプロジェクトのために大丈夫です。 最終結果から結果ジョブDをどのように除外できますか? (他のすべてのジョブは成功ですが、最終結果はFAILEDです)

+0

JOB Dを構成から除外したり、無効にすることはできません。失敗しても問題ありません。 – ANIL

+0

プロジェクトに関する追加情報が必要です。いいえ、私はMultijobから除外または無効にすることはできません。 – Andrey

答えて

1

JOB D実行結果に関係なくMaster MultiJob Project (Job)を成功させたいと考えています。しかし、JOB A,JOB BおよびJOB Cは成功するはずです。

Groovy Postbuild Pluginを使用してMaster Multijob Project (Job)を成功させることができます。

このプラグインをJenkinsにインストールすると、Post-build ActionsセクションにGroovy Postbuildステップが得られます。 Groovy Postbuildステップを選択すると、ジョブの動作を操作するGroovyスクリプトを追加するオプションが与えられます。

そこに次のスクリプトを追加します。

if([email protected] == hudson.model.Result.FAILURE){ 
errpattern = ~/[FAILURE].*/; 
manager.build.logFile.eachLine{ line -> 
    errmatcher=errpattern.matcher(line) 
    if (errmatcher.find()) { 
     [email protected] = hudson.model.Result.SUCCESS 
    } 
    } 
} 

上記のスクリプトが何をするかは、それが失敗した場合、成功へのあなたの親ジョブのビルド・ステータスを変更です。しかし、ここで問題となるのは、あなたの段階で子どもの仕事が失敗した場合のビルドステータスを成功に変えることです。

他のジョブではなく、JOB DのFAILUREステータスのみを無視します。ですから、JOB AJOB BJOB Cという実行結果を判断することができます。いずれかが失敗した場合、Groovyスクリプトが親ジョブのビルド状況をSUCCESSに変更しないようにすることができます。

あなたのマルチジョブ構成の Buildセクションで
JOBA_BUILD_STATUS=$(curl --silent "http://<jenkins_URL>/job/JOBA/$BUILD_ID/api/json" | jq -r '.result') 

JOBB_BUILD_STATUS=$(curl --silent "http://<jenkins_URL>/job/JOBB/$BUILD_ID/api/json" | jq -r '.result') 

JOBC_BUILD_STATUS=$(curl --silent "http://<jenkins_URL>/job/JOBC/$BUILD_ID/api/json" | jq -r '.result') 

、すべてのフェーズが追加した後:私たちは、次のように使用することができますJOB AJOB BJOB C

のビルド結果を決定するために、今すぐ

Execute shellステップを実行し、上記のスクリプトを追加します。

それでは、JOB Dのビルド結果を無視してJOB AJOB BJOB Cのビルド結果を検討するためのGroovyスクリプトを微調整しましょう。

if(([email protected] == hudson.model.Result.FAILURE) && ("SUCCESS".equals(manager.build.buildVariables.get("JOBA_BUILD_STATUS"))) && ("SUCCESS".equals(manager.build.buildVariables.get("JOBB_BUILD_STATUS"))) && ("SUCCESS".equals(manager.build.buildVariables.get("JOBC_BUILD_STATUS")))){ 
    errpattern = ~/[FAILURE].*/; 
    manager.build.logFile.eachLine{ line -> 
    errmatcher=errpattern.matcher(line) 
    if (errmatcher.find()) { 
     [email protected] = hudson.model.Result.SUCCESS 
    } 
    } 
} 

さて、それはJOB Dのビルド結果を無視して、JOB A, B & Cのビルド結果が成功かいないかどうかを確認します。成功した場合は、マルチジョブのビルド結果がSUCCESSに変更されます。

+0

これは問題の良い解決策ですが、残念ながらプラグインをインストールすることはできません。 – Andrey

0

Groovyスクリプトを使用した別のソリューションです。あなたのマルチジョブでポストビルドアクションとして追加してください。

def subjobStatusMap = [:] 

manager.build.getSubBuilds().each { subBuild-> 
     subJobName = subBuild.getJobName() 
     subJobNumber = subBuild.getBuildNumber() 
     job = hudson.model.Hudson.instance.getItem(subBuild.getJobName()) 
     results = job.getLastCompletedBuild().getResult() 

     subjobStatusMap.put((subJobName), results) 
} 
manager.listener.logger.println(subjobStatusMap) 

if(("SUCCESS".equals(subjobStatusMap.get("JOB_A").toString()))&& ("SUCCESS".equals(subjobStatusMap.get("JOB_B").toString())) && ("SUCCESS".equals(subjobStatusMap.get("JOB_C").toString()))) { 
    [email protected] = hudson.model.Result.SUCCESS 
} 
関連する問題