Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jenkins 当其中一个阶段中止时,如何标记构建成功?_Jenkins_Jenkins Pipeline_Jenkins Groovy - Fatal编程技术网

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,如果您希望将此阶段标记为灰色而不是不稳定的,您还可以将阶段状态设置为
中止
。它也会起作用的。是的。我更新了答案以包括
中止
阶段状态。