これが私が遊んでいるコードです
node {
stage 'build'
echo 'build'
stage 'tests'
echo 'tests'
stage 'end-to-end-tests'
def e2e = build job:'end-to-end-tests', propagate: false
result = e2e.result
if (result.equals("SUCCESS")) {
stage 'deploy'
build 'deploy'
} else {
?????? I want to just fail this stage
}
}
「エンドツーエンドテスト」の段階を、ジョブ全体を失敗させることなく失敗としてマークする方法はありますか?伝播falseは常にステージをtrueとしてマークしますが、これは私が望んでいることではありませんが、Propagate trueはジョブを失敗としてマークします。
ステージはブロックを取得するため、try-catchでステージをラップします。ステージ内でtry-catchを実行すると成功します。
前述の新機能はより強力になります。その間:
try {
stage('end-to-end-tests') {
node {
def e2e = build job:'end-to-end-tests', propagate: false
result = e2e.result
if (result.equals("SUCCESS")) {
} else {
sh "exit 1" // this fails the stage
}
}
}
} catch (e) {
result = "FAIL" // make sure other exceptions are recorded as failure too
}
stage('deploy') {
if (result.equals("SUCCESS")) {
build 'deploy'
} else {
echo "Cannot deploy without successful build" // it is important to have a deploy stage even here for the current visualization
}
}
JENKINS-26522 のような音。現在、できる最善のことは、全体的な結果を設定することです。
if (result.equals("SUCCESS")) {
stage 'deploy'
build 'deploy'
} else {
currentBuild.result = e2e.result
// but continue
}
私は最近、vazaの答えを使用しようとしました ジョブ全体を失敗させずにJenkinsパイプラインステージを失敗として表示する ジョブ名のような名前の独自のステージでジョブを実行する関数を記述するためのテンプレートとして驚いたことに動作しましたが、恐らくグルーヴィーな専門家がそれを見ているかもしれません:)
def BuildJob(projectName) {
try {
stage(projectName) {
node {
def e2e = build job:projectName, propagate: false
result = e2e.result
if (result.equals("SUCCESS")) {
} else {
error 'FAIL' //sh "exit 1" // this fails the stage
}
}
}
} catch (e) {
currentBuild.result = 'UNSTABLE'
result = "FAIL" // make sure other exceptions are recorded as failure too
}
}
node {
BuildJob('job1')
BuildJob('job2')
}
これは、宣言的なパイプラインでも可能です。
pipeline {
agent any
stages {
stage('1') {
steps {
sh 'exit 0'
}
}
stage('2') {
steps {
catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE') {
sh "exit 1"
}
}
}
stage('3') {
steps {
sh 'exit 0'
}
}
}
}
上記の例では、すべてのステージが実行され、パイプラインは成功しますが、ステージ2は失敗として表示されます。
ご想像のとおり、不安定またはその他のものにしたい場合は、buildResult
とstageResult
を自由に選択できます。ビルドに失敗して、パイプラインの実行を継続することもできます。
これはかなり新しい機能なので、Jenkinsが最新であることを確認してください。
ステージで「sh "not exist command"」などの明示的な失敗タスクを追加できます。
if (result.equals("SUCCESS")) {
stage 'deploy'
build 'deploy'
} else {
try {
sh "not exist command"
}catch(e) {
}
}
stage
の範囲外で、例外を処理し、ビルドステータスを選択しますnode("node-name") {
try {
stage("Process") {
error("This will fail")
}
} catch(Exception error) {
currentBuild.result = 'SUCCESS'
return
}
stage("Skipped") {
// This stage will never run
}
}
node("node-name") {
try {
stage("Process") {
error("This will fail")
}
} catch(Exception error) {
currentBuild.result = 'ABORTED'
return
}
stage("Skipped") {
// This stage will never run
}
}