Jenkinsfile失败了一步,继续其余部分



我有一个像这样的jenkinsfile:

pipeline {
    agent any
    options {
        buildDiscarder(logRotator(numToKeepStr: '7'))
        disableConcurrentBuilds()
        timeout(time: 10, unit: 'MINUTES')
        timestamps()
    }
    stages {
        stage('Admin') {
            steps {
                script {
                    try {
                        result = "FAIL"
                    } catch(error) {
                        result = "FAIL"
                    }
                }
            }
        }
        stage('Normal') {
            steps {
                script {
                    try {
                sh("echo 'hi'")
                    } catch(error) {
                    }
                }
            }
        }
    }
}

我如何使第一步失败并显示红色并继续进行更多步骤?

我已经看了所有的答案,无法使它起作用。

设置result = "FAIL"不会导致步骤失败。我该怎么做,但继续下一步?

您可以通过为全局jenkins变量currentBuild设置新值来将构建状态标记为失败。该变量有3个状态:SUCCESS(绿色),FAILURE(红色)和UNSTABLE(黄色)。catch应防止构建退出,因此您可以设置currentBuild的状态并继续。

           try {
               //so something
            } catch(error) {
                //mark build as failed
                currentBuild.result = 'FAILURE'
            }
        }

我认为这应该有效。可悲的是,我没有办法验证此ATM。如果它不起作用,请告诉我。

根据我的知识,我们可以实现与下面的相同。

  1. 使用脚本步骤和try-catch块

    stage('someStage') {
    steps {
        script {
            try {
                //Do something
            } catch (err) {
                echo err
            }
        }
        echo currentBuild.result = 'FAILURE'
      }
    }
    
  2. 您可以使用spepagate:false,它可以在构建步骤中使用。如下

    stage("example") {
        b = build(job: "example-job", propagate: false).result
        if(b == 'FAILURE') {
            echo "First job failed"
            currentBuild.result = 'FAILURE' // of FAILURE
        }
    }
    stage("test") {
        build("test-job")
    }
    

链接:
https://jenkins.io/doc/pipeline/steps/pipeline-build-step/

https://medium.com/@lenkovits/jenkins-pipelines-and-their-dirty-secrets-1-9e535cd603f4

您是否想显示一个阶段"红色"和所有其他(不失败)"绿色"?据我所知,这是不可能的。

您想知道哪个阶段正在失败,哪个阶段正确运行?好吧,这取决于您希望它如何显示

简单的方法:如先前的答案中所建议的,您可以使用" Echo"将其打印在控制台

'我想要全力的方法:在另一个try-catch中盖上一个trycatch,并使用"错误"信号:

stages {
    try {
        stage ('Normal') {
            try {
            /* Do your thing */
            } catch (err) {
                /* Mark this stage as "failure" using error
                error 'Stage Normal failing'
            }
        }  // stage 'Normal'
    } catch (err) {
        // here is the 'error' signal captured and omitted by now
    }

阶段失败出现,文本"失败"显示在框中,并在深色的红色

中出现。

最新更新