如果步骤不稳定,Jenkins 管道将失败
Jenkins Pipeline Fails if Step is Unstable
当前,当 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
}
在此示例中,作业单元测试的结果不稳定,但在管道中显示为失败。
如何更改 jobs/pipeline/jenkins 以使 (1) 管道步骤不稳定而不是失败,以及 (2) 管道状态不稳定而不是失败。
我尝试添加 MAVEN_OPTS
参数 -Dmaven.test.failure.ignore=true
,但这并没有解决问题。我不确定如何将 build 'Unit-Test'
包装成一些可以捕获和处理结果的逻辑。
添加带有 this logic 的子管道并不能解决问题,因为没有从 subversion 检出的选项(该选项在常规 Maven 作业中可用)。如果可能,我不想使用命令行结帐。
无论步骤是 UNSTABLE 还是 FAILED,脚本中的最终构建结果都将是 FAILED。
您可以将propagate默认设置为false,避免流程失败。
def result = build job: 'test', propagate: false
在流程结束时,您可以根据从 "result" 变量中获得的内容来判断最终结果。
例如
currentBuild.result='UNSTABLE'
这是一个详细的例子
How to set current build result in Pipeline
Br,
蒂姆
经验教训:
- Jenkins 将根据
currentBuild.result
值不断更新管道,该值可以是 SUCCESS
、UNSTABLE
或 FAILURE
(source)。
build job: <JOBNAME>
的结果可以存储在一个变量中。构建状态在 variable.result
.
build job: <JOBNAME>, propagate: false
将防止整个构建立即失败。
currentBuild.result
can only get worse。如果该值以前是 FAILED
并通过 currentBuild.result = 'SUCCESS'
收到新状态 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'
}
当前,当 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
}
在此示例中,作业单元测试的结果不稳定,但在管道中显示为失败。
如何更改 jobs/pipeline/jenkins 以使 (1) 管道步骤不稳定而不是失败,以及 (2) 管道状态不稳定而不是失败。
我尝试添加 MAVEN_OPTS
参数 -Dmaven.test.failure.ignore=true
,但这并没有解决问题。我不确定如何将 build 'Unit-Test'
包装成一些可以捕获和处理结果的逻辑。
添加带有 this logic 的子管道并不能解决问题,因为没有从 subversion 检出的选项(该选项在常规 Maven 作业中可用)。如果可能,我不想使用命令行结帐。
无论步骤是 UNSTABLE 还是 FAILED,脚本中的最终构建结果都将是 FAILED。
您可以将propagate默认设置为false,避免流程失败。
def result = build job: 'test', propagate: false
在流程结束时,您可以根据从 "result" 变量中获得的内容来判断最终结果。
例如
currentBuild.result='UNSTABLE'
这是一个详细的例子 How to set current build result in Pipeline
Br,
蒂姆
经验教训:
- Jenkins 将根据
currentBuild.result
值不断更新管道,该值可以是SUCCESS
、UNSTABLE
或FAILURE
(source)。 build job: <JOBNAME>
的结果可以存储在一个变量中。构建状态在variable.result
.build job: <JOBNAME>, propagate: false
将防止整个构建立即失败。currentBuild.result
can only get worse。如果该值以前是FAILED
并通过currentBuild.result = 'SUCCESS'
收到新状态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'
}