21

現在、maven-job が不安定 (黄色) の場合、私のパイプラインは失敗します (赤)。

node {
    stage 'Unit/SQL-Tests'
    parallel (
       phase1: { build 'Unit-Tests' }, // maven
       phase2: { build 'SQL-Tests' } // shell
    )
    stage 'Integration-Tests'
    build 'Integration-Tests' // maven
}

この例では、ジョブ Unit-Test の結果は不安定ですが、パイプラインでは失敗として示されています。

ジョブ/パイプライン/ジェンキンスを変更して、(1) パイプラインのステップが失敗ではなく不安定になり、(2) パイプラインのステータスが失敗ではなく不安定になるようにするにはどうすればよいですか。

MAVEN_OPTSパラメータを追加してみました-Dmaven.test.failure.ignore=trueが、問題は解決しませんでした。build 'Unit-Test'結果をキャッチして処理できるロジックにラップする方法がわかりません。

Subversion からチェックアウトするオプションがないため (このオプションは通常の Maven ジョブで使用できます)、このロジックを使用してサブパイプラインを追加してもうまくいきません。可能であれば、コマンドライン チェックアウトを使用したくありません。

4

2 に答える 2

31

学んだ教訓:

  • Jenkins は、または( sourcecurrentBuild.result ) のいずれかの値に従って、パイプラインを継続的に更新します。SUCCESSUNSTABLEFAILURE
  • の結果はbuild job: <JOBNAME>変数に格納できます。ビルドステータスは ですvariable.result
  • build job: <JOBNAME>, propagate: falseビルド全体がすぐに失敗するのを防ぎます。
  • currentBuild.result 悪化するだけです。その値が以前のもので、それを介してFAILED新しいステータスを受け取った場合、そのままになりますSUCCESScurrentBuild.result = 'SUCCESS'FAILED

これは私が最終的に使用したものです:

    node {
        def result  // define the variable once in the beginning
        stage 'Unit/SQL-Tests'
        parallel (
           phase1: { result = build job: 'Unit', propagate: false }, // might be UNSTABLE
           phase2: { build 'SQL-Tests' }
        )
        currentBuild.result = result.result  // update the build status. jenkins will update the pipeline's current status accordingly
        stage 'Install SQL'
        build 'InstallSQL'
        stage 'Deploy/Integration-Tests'
        parallel (
           phase1: { build 'Deploy' },
           phase2: { result = build job: 'Integration-Tests', propagate: false }
        )
        currentBuild.result = result.result // should the Unit-Test be FAILED and Integration-Test SUCCESS, then the currentBuild.result will stay FAILED (it can only get worse)
        stage 'Code Analysis'
        build 'Analysis'
    }
于 2016-08-03T06:10:52.933 に答える
21

ステップが UNSTABLE または FAILED のいずれであっても、スクリプトの最終的なビルド結果は FAILED になります。

フローの失敗を避けるために、デフォルトで伝播を false に追加できます。

def result = build job: 'test', propagate: false

フローの最後に、「結果」変数から取得した内容に基づいて最終結果を判断できます。

例えば

currentBuild.result='UNSTABLE'

ここに詳細な例があります パイプラインで現在のビルド結果を設定する方法

Br、

ティム

于 2016-08-02T11:30:22.273 に答える