Jenkins管道冒泡出shell出口代码以使该阶段失败

Jenkins管道冒泡出shell出口代码以使该阶段失败,jenkins,groovy,jenkins-pipeline,Jenkins,Groovy,Jenkins Pipeline,绝对詹金斯管道/groovy noob这里,我有一个舞台 stage('Building and Deploying'){ def build = new Build() build.deploy() } 它使用的是共享库,Build.groovy的源代码如下: def deploy(branch='master', repo='xxx'){ if (env.BRANCH_NAME.trim() == branch) { def script = lib

绝对詹金斯管道/groovy noob这里,我有一个舞台

stage('Building and Deploying'){
    def build = new Build()
    build.deploy()
}
它使用的是共享库,
Build.groovy
的源代码如下:

def deploy(branch='master', repo='xxx'){
    if (env.BRANCH_NAME.trim() == branch) {
        def script = libraryResource 'build/package_indexes/python/build_push.sh'
        // TODO: Test out http://stackoverflow.com/questions/40965725/jenkins-pipeline-cps-global-lib-resource-file-for-shell-script-purpose/40994132#40994132
        env.PYPI_REPO = repo
        sh script
    }else {
        echo "Not pushing to repo because branch is: "+env.BRANCH_NAME.trim()+" and not "+branch
    }
}
问题是,当无法将构建推送到远程回购(见下文)时,该阶段仍然显示成功

running upload
Submitting dist/xxx-0.0.7.tar.gz to https://xxx.jfrog.io/xxx/api/pypi/grabone-pypi-local
Upload failed (403): Forbidden
...
Finished: SUCCESS

如何使shell脚本的退出代码冒泡并使阶段失败?

sh步骤返回与实际sh命令(本例中为脚本)返回的状态代码相同的状态代码。发件人:

通常,使用非零状态代码退出的脚本将导致步骤失败并出现异常

您必须确保脚本在失败时返回非零状态代码。如果不确定脚本返回的内容,可以使用
sh
步骤的
returnStatus
参数检查返回值,该参数不会使生成失败,但会返回状态代码。例如:

def statusCode = sh script:script, returnStatus:true
然后可以使用此状态代码设置当前生成的结果

您可以使用:

  • currentBuild.result='FAILURE'
    currentBuild.result='UNSTABLE'
    分别将步骤标记为红色/黄色。在这种情况下,构建仍将处理接下来的步骤
  • error“您的错误消息”
    如果您希望生成失败并立即退出

谢谢,所以一旦我有了状态码,我是否需要在
deploy
函数中返回它?我已经添加了一些示例,说明如何将生成标记为失败。很酷,谢谢,我现在有一个不同的问题,你能看一下吗?一个groovy新手(我)提醒我:参数
script
returnStatus
之间有一个逗号(,)。正确的命令应该是:
def statusCode=sh script:script,returnStatus:true
是否有方法检查返回状态并运行另一个命令?来吧,如果不是这样的话