2017-06-01 18 views
1

を失敗していない、ジェンキンスパイプラインのビルドは、私は以下のように<a href="https://jenkins.io/doc/book/pipeline/syntax/" rel="nofollow noreferrer">declarative</a>パイプラインステージを持っている

stage('build') { 
    steps { 
     echo currentBuild.result 
     script { 
       try { 
        bat 'ant -f xyz\\build.xml' 
       } catch (err) { 
        echo "Caught: ${err}" 
        currentBuild.result = 'FAILURE' 
       } 
      } 
     echo currentBuild.result 
    } 
} 

は私がビルドは以下のメッセージで失敗しているので、パイプラインが失敗することを期待しています。

BUILD FAILED 
C:\...\build.xml:8: The following error occurred while executing this line: 
C:\...\build.xml:156: The following error occurred while executing this line: 
C:\...\build.xml:111: Problem creating jar: C:\...\xyz.war (The system cannot find the path specified) (and the archive is probably corrupt but I could not delete it) 

currentBuild.resultはnullです。
antコールが間違っていますか?
戻り値のステータスがパイプラインによって自動的にキャッチされないのはなぜですか?
antコールが失敗したステータスを返していない可能性がありますか?

try..catchの代わりにcatchErrorを試しても、ビルドの失敗は捕捉されません。

+1

antがパイプラインにエラーを伝播しないように見えます。これはおそらくhttps://stackoverflow.com/questions/22395597/propagating-exit-code-from-execd-batch-file-back-to-antに役立ちます。 – haschibaschi

+0

haschibaschiありがとうございました、あなたのコメントのページに、私に試してみるべきいくつかのポインタ、つまり 'echo%ERRORLEVEL%'がありました。私は答えの下に記載されている解決策の1つでそれを使用しました。 – user2891264

答えて

2

解決策は、以下のようにAntコールに「call」キーワードを追加することでした。これは、終了コードをantからバッチコールに伝播します。

stage('build') { 
    steps { 
     bat 'call ant -f xyz\\build.xml' 
    } 
} 

別のソリューションは、バッチスクリプトを使用してあり、以下を参照してください、
- Jenkinsfile

stage('build') { 
    steps { 
     bat 'xyz\\build.bat' 
    } 
} 

からこのあるbuild.batで

call ant -f "%CD%\xyz\build.xml" 
echo ELVL: %ERRORLEVEL% 
IF NOT %ERRORLEVEL% == 0 ( 
    echo ABORT: %ERRORLEVEL% 
    call exit /b %ERRORLEVEL% 
) ELSE (
    echo PROCEED: %ERRORLEVEL% 
) 

あるbuild.bat 、 callキーワードを使用しないと、最初のコマンドだけが実行され、残りは無視されます。私はこれをパイプラインのantコールに直接適用していました。

関連する問題

 関連する問題