如何中止jenkins构建与成功从shell脚本

wr98u20j  于 2023-11-17  发布在  Jenkins
关注(0)|答案(1)|浏览(302)

使用如下shell脚本构建一个自由式jenkins作业

CLIENT_CHANGED=# some logic for setting this

if [[ $CLIENT_CHANGED == false ]]
then
    # abort build if no changes to client code
    exit 0
fi

字符串
exit 0实际上并没有停止构建。如果我使用exit 1,它会停止,但是构建被设置为失败,这是我不希望的。
这里的总体目标是,如果git中的某个目录在最近一次提交中没有被修改,则停止构建。如果有其他方法可以实现这一点,我愿意接受建议。

kmbjn2e3

kmbjn2e31#

您可以使用returnStatus选项将脚本的退出代码设置为一个变量。然后在脚本的后面,您可以通过error()函数以选择的构建状态退出。不幸的是,您不能使用SUCCESS过早退出(它只会导致失败状态),但您仍然可以使用ABORTED
下面是一个示例管道脚本,希望能演示这是如何工作的:

stages {
    stage("Run script") {
        steps {
            script {
                exitCode = sh(script: "exit 1", returnStatus: true)
            }
        }
    }

    stage("Abort the build") {
        when {
            expression {
                !exitCode
            }
        }

        steps {
            script {
                currentBuild.result = "ABORTED"

                error("No changes to client code")
            }
        }
    }

    stage("Fail the build") {
        when {
            expression {
                exitCode
            }
        }

        steps {
            script {
                currentBuild.result = "FAILURE"

                error("Build failed")
            }
        }
    }
}

字符串
参见:

  1. https://www.jenkins.io/doc/pipeline/steps/workflow-durable-task-step/
  2. https://devops.stackexchange.com/questions/885/cleanest-way-to-prematurely-exit-a-jenkins-pipeline-job-as-a-success/12776#12776
    ======================
    对于自由式构建,您可以通过使用shell脚本构建步骤附带的“退出代码以设置构建不稳定”选项来实现非常相似的功能。只需确保选择的退出代码不是0。


的数据
$CLIENT_CHANGED == false时,上述步骤将给予以下输出:

Building step 1
Setting the build status to unstable, but continuing the build
Building step 2


$CLIENT_CHANGED == true

Building step 1
Building as usual
Building step 2

相关问题