首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >继续詹金斯输油管道通过故障阶段

继续詹金斯输油管道通过故障阶段
EN

Stack Overflow用户
提问于 2016-11-15 01:28:58
回答 8查看 119.8K关注 0票数 97

我有一系列执行快速检查的阶段。我想把它们都做好,即使失败了。例如:

代码语言:javascript
复制
stage('one') {
    node {
        sh 'exit 0'
    }
}
stage('two') {
    node {
        sh 'exit 1'   // failure
    }
}
stage('three') {
    node {
        sh 'exit 0'
    }
}

Stage two失败,因此默认情况下不执行stage three

通常这将是parallel的一项工作,但我希望在舞台视图中显示它们。在下面的模拟中:

  • 第四版显示了通常发生的情况。作业two失败,因此three不会运行。
  • 我用Photoshopped制作了第6版来展示我想要看到的东西。作业two失败并显示为这样,但three仍在运行。真正的Jenkins可能会显示整个版本#6,略带红色,这当然很好。

EN

回答 8

Stack Overflow用户

发布于 2019-07-10 18:50:18

现在这是可能的。下面是一个声明性管道的示例,但是catchError也适用于脚本管道。

代码语言:javascript
复制
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阶段将显示为失败:

正如您可能已经猜到的,您可以自由选择buildResultstageResult,以防您希望它不稳定或其他任何东西。您甚至可以失败构建并继续执行管道。

确保您的Jenkins是最新的,因为这是一个相当新的特性。

编辑:您需要“管道:基本步骤”2.16 (2019年5月14日)

票数 114
EN

Stack Overflow用户

发布于 2018-06-15 20:59:20

我也有同样的担心。我解决了这个问题。

第二阶段将以红色显示,并被标记为失败,而其余阶段将继续运行。您可以设置一个标志,并在阶段结束时检查标志并通知整个构建的状态。

代码语言:javascript
复制
node {

    def build_ok = true

    stage('one') {
        sh 'exit 0'
    }

    try{
        stage('two') {
            sh 'exit 1'   // failure
        }
    } catch(e) {
        build_ok = false
        echo e.toString()  
    }

    stage('three') {
        sh 'exit 0'
    }

    ....

    if(build_ok) {
        currentBuild.result = "SUCCESS"
    } else {
        currentBuild.result = "FAILURE"
    }
}
票数 19
EN

Stack Overflow用户

发布于 2019-06-24 07:51:48

这取决于您使用的是声明式管道语法还是脚本管道语法

声明式管道语法

代码语言:javascript
复制
pipeline {
    agent any
    stages {
        stage('one') {
            steps {
                sh 'exit 0'
            }
        }
        stage('two') {
            steps {
                sh 'exit 1'   // failure
            }
        }
    }
    post {
        always {
            sh 'exit 0'
        }
    }
}

后条件块包含与步骤部分相同的步骤

脚本管道语法

代码语言:javascript
复制
node {

    def build_ok = true

    stage('one') {
        sh 'exit 0'
    }

    try{
        stage('two') {
            sh 'exit 1'   // failure
        }
    } catch(e) {
        build_ok = false
        echo e.toString()  
    }

    stage('three') {
        sh 'exit 0'
    }

    if(build_ok) {
        currentBuild.result = "SUCCESS"
    } else {
        currentBuild.result = "FAILURE"
    }
}
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40600621

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档