Jenkins管道正在跳过groovy';如果';条款

Jenkins管道正在跳过groovy';如果';条款,jenkins,groovy,jenkins-pipeline,jenkins-groovy,Jenkins,Groovy,Jenkins Pipeline,Jenkins Groovy,我正在管道中进行一些测试。我的目标是,如果存在错误文件,构建应该失败。但是,如果由于某种原因,测试遇到异常,并且没有写入错误或成功的文件,那么管道也应该失败。如果两个失败条件都不满足,我希望执行上游作业 我在舞台上写的,最初看起来是这样的: stage('system tests') { steps { dir(project_root) { def error_exists = sh( script: 'ls er

我正在管道中进行一些测试。我的目标是,如果存在错误文件,构建应该失败。但是,如果由于某种原因,测试遇到异常,并且没有写入错误或成功的文件,那么管道也应该失败。如果两个失败条件都不满足,我希望执行上游作业

我在舞台上写的,最初看起来是这样的:

stage('system tests') {
    steps {
        dir(project_root) {
            def error_exists = sh(
                script: 'ls error.txt', returnStatus: true
            )
            if (error_exists == 0) {
                currentBuild.result = 'FAILED'
                return
            }
            build job: 'my-job;
        }
    }
}
上述代码有效。当正在执行的测试写入错误文件时,管道将失败。然后,我尝试修改代码以适应既不编写错误文件也不编写成功文件的结果

stage('system tests') {
    steps {
        dir(project_root) {
            def error_exists = sh(
                script: 'ls error.txt', returnStatus: true
            )
            def success_exists = sh(
                script: 'ls success.txt', returnStatus: true
            )
            if (error_exists == 0) {
                currentBuild.result = 'FAILED'
                return
            } else if (success_exists == 1 && error_exists == 1) {
                currentBuild.result = 'FAILED'
                return
            }
            build job: 'my-job;
        }
    }
}
我模拟了这样一种情况:两个文件都没有写入,管道也没有失败,而是触发了上游构建。如果两个shell脚本的结果都为false,为什么不输入
else if
子句?我从中获取了逻辑运算符,我认为应该满足它们(下面的代码是新作业管道中shell脚本的输出)


如果这些文件不存在,则sh jenkins步骤返回错误代码2。你应该像这样重写你的“如果条件”:

success_exists == 2 && error_exists == 2
但是,我认为在您的情况下,此代码更适合:

stage('system tests') {
steps {
    dir(project_root) {
        def error_exists = sh(
            script: 'ls error.txt', returnStatus: true
        )
        def success_exists = sh(
            script: 'ls success.txt', returnStatus: true
        )
        if (error_exists == 0) {
            currentBuild.result = 'FAILED'
            return
        } else if (success_exists != 0 && error_exists != 0) {
            currentBuild.result = 'FAILED'
            return
        }
        build job: 'my-job;
    }
}
因为无法找到文件可能还有其他原因(缺少访问权限等)

stage('system tests') {
steps {
    dir(project_root) {
        def error_exists = sh(
            script: 'ls error.txt', returnStatus: true
        )
        def success_exists = sh(
            script: 'ls success.txt', returnStatus: true
        )
        if (error_exists == 0) {
            currentBuild.result = 'FAILED'
            return
        } else if (success_exists != 0 && error_exists != 0) {
            currentBuild.result = 'FAILED'
            return
        }
        build job: 'my-job;
    }
}