Jenkins 当其中一个阶段中止时,如何标记构建成功?
我有一个带有阶段的管道,其中一个阶段间歇性地花费比预期更长的时间,因此使用Jenkins 当其中一个阶段中止时,如何标记构建成功?,jenkins,jenkins-pipeline,jenkins-groovy,Jenkins,Jenkins Pipeline,Jenkins Groovy,我有一个带有阶段的管道,其中一个阶段间歇性地花费比预期更长的时间,因此使用timeout中止它。但如果阶段中止,构建也会标记为中止。以下是管道的代码: pipeline { agent any stages { stage('First') { options { timeout(time: 10, unit: 'SECONDS') } steps {
timeout
中止它。但如果阶段中止,构建也会标记为中止。以下是管道的代码:
pipeline {
agent any
stages {
stage('First') {
options {
timeout(time: 10, unit: 'SECONDS')
}
steps {
script {
catchError(buildResult: 'SUCCESS') {
echo "Executing stage I"
sleep 12
}
}
}
}
stage('Second') {
steps {
script {
echo "Executing stage II"
}
}
}
}
}
即使阶段被标记为中止
,我还是想将构建标记为成功
。您能帮助我如何做到这一点吗?您的catchError()
在您的情况下不起作用。documantation()说明了以下内容:
buildResult(可选)
如果捕获到错误,则总体生成结果
将设置为此值请注意,生成结果只能
更糟糕的是,如果当前
结果不稳定或更糟。使用SUCCESS或null保留生成
捕获错误时设置的结果
生成状态设置为currentBuild.currentResult
,它可以有三个值:SUCCESS
、不稳定
或失败
如果要在中止时将生成标记为成功
,可以使用post选项()中止
:
pipeline {
agent any
stages {
stage('Example') {
steps {
echo 'Hello World'
}
}
}
post {
aborted {
// Executed only if stage is aborted
currentBuild.result = 'SUCCESS'
}
}
}
我建议对Michael的答案进行改进(顺便说一句,这是正确的)。您可以使用
catchError
标记stage中止(或不稳定
)并标记生成成功
,但您需要使用try catch
块包装可能超时的代码以控制错误。考虑下面的例子:
管道{
任何代理人
舞台{
阶段(‘第一’){
选择权{
超时(时间:3,单位:秒)
}
台阶{
剧本{
catchError(buildResult:'SUCCESS',stagerResult:'ABORTED'){
试一试{
回显“执行第一阶段”
睡眠4
}catch(org.jenkinsci.plugins.workflow.steps.FlowInterruptedException e){
错误“阶段被${e.toString()}中断”
}
}
}
}
}
阶段(第二阶段){
台阶{
剧本{
echo“执行第二阶段”
}
}
}
}
}
运行此管道时,超时的阶段标记为“已中止”
,但管道将继续,如果其余阶段中没有故障,则将其标记为“成功”
下面是不稳定的
阶段状态的样子
Michael的解决方案同样有效,但产生的结果略有不同——超时的阶段标记为成功
,这可能不太直观。你需要点击舞台来检查它是否超时
管道{
任何代理人
舞台{
阶段(‘第一’){
选择权{
超时(时间:3,单位:秒)
}
台阶{
剧本{
试一试{
回显“执行第一阶段”
睡眠4
}捕获(例外e){
currentBuild.result=“成功”
}
}
}
}
阶段(第二阶段){
台阶{
剧本{
echo“执行第二阶段”
}
}
}
}
}
是的,这样即使阶段失败,我也可以将构建标记为成功。我一直在寻找一些东西,将构建标记为
成功
,即使阶段中止。答案现在应该更适合您的问题。我以前也尝试过同样的方法,但没有成功。请参考-感谢Michael为您所做的努力以及您在此处输入的所有详细信息!您之前编辑的答案也很有帮助,但Szymon的答案更清楚地说明了阶段失败,并且仍然将构建标记为成功。不用担心!我很高兴你找到了你的解决方案:)你的解决方案就是我一直在寻找的!我想要的不是成功,而是一些不同的东西,并且仍然将构建标记为成功。舞台目前的不稳定状态有助于识别出哪里出了问题。谢谢!Michael的解决方案也起了作用,但它将中止的阶段标记为“绿色”。@TDHM,如果您希望将此阶段标记为灰色而不是不稳定的,您还可以将阶段状态设置为中止
。它也会起作用的。是的。我更新了答案以包括中止
阶段状态。