2016-07-15 3 views
2

ジェンキンスパイプラインでProbemsを持っています。私は次のことをしたい: ビルド環境がすでにワークスペースに存在する場合は、以前の環境を使用して(増分)ビルドを実行します。Jenkinsパイプライン:再試行ブロックを試してみる

それはクリーンビルドをもう一度再試行に失敗した場合(再構築した後、以前のBuiod環境を削除)

私はこれを行うにしようとしています:私はジェンキンスでこれを実行したとき

retry(1) { 
     try { 
      prepareEnvironment() 
      setupBuildEnvironment() // sets up environment if it is not present yet 
      runBuild() 
     } catch (e) { 
      echo 'Err: Incremental Build failed with Error: ' + e.toString() 
      echo '  Trying to build with a clean Workspace' 
      removeOldBuildEnvironment() 
     } finally { 
      cleanupEnvironment() 
     } 
    } 

org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException:新しいjava.lang.Exceptを使用することはできません スクリプトをrunBuild()ステップは、私が手に失敗しましたion java.lang.String

問題は、try/catchがretry(1)ブロック内にあると思います。どんな提案を修正するか

また、再試行せずに試しました。ここで私はrunBuild内部

bat "..." 

ステップは、()例外にパイプラインを返した場合、私はexeptionをキャッチし、クリーンなビルドが成功しても失敗した場合、ステージがマークされているという問題がありました。

提案がありますか?

答えて

3

スクリプトの承認(Manage Jenkins、下部のどこかにある)に行き、例外のためにtoStringメソッドを承認します。

スクリプト承認が見つからない場合は、最初にプラグインhttps://wiki.jenkins-ci.org/display/JENKINS/Script+Security+Pluginをインストールしてください。

RejectedAccessExceptionと表示されている場合は、そのページにアクセスする必要があります。

3

エラーメッセージがないtry/catchので、しかしため、サンドボックス・モードで許可されていないthrow new Exception("message")ように、prepareEnvironmentsetupBuildEnvironment又はrunBuild方法に例外をスローします。このステップでは、指定したメッセージでhudson.AbortExceptionがスローされます

def runBuild() { 
    // ... 
    error "ERR" 
} 

:どのような許可されていることはそうのようなerrorステップを使用しています。期待通りに例外がキャッチに飲み込まれるよう

あなたのコード内のcatchブロックはこの例外をキャッチし、適切なメッセージを出力します、あなたのスクリプトを行って、この変更を一方removeOldBuildEnvironment

を呼び出すには、まだ動作しません。再試行ステップはコードを再度実行しません。それは例外を動作させるためには、catchブロックから再びスローする必要があります(あなたが​​の代わりにretry(2)を使用する必要があることに注意してください)

retry(2) { 
    try { 
     prepareEnvironment() 
     setupBuildEnvironment() // sets up environment if it is not present yet 
     runBuild() 
    } catch (e) { 
     echo 'Err: Incremental Build failed with Error: ' + e.toString() 
     echo '  Trying to build with a clean Workspace' 
     removeOldBuildEnvironment() 
     throw e 
    } finally { 
     cleanupEnvironment() 
    } 
} 
0

は、チェックボックス「使用Groovyのサンドボックス」をオフにしてください。

関連する問題