绝对詹金斯管道/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留档:
通常,退出时状态代码为非零的脚本将导致步骤失败并出现异常。
必须确保脚本在失败时返回非零状态代码。如果不确定脚本返回的内容,可以使用 sh
步骤的 returnStatus
参数检查返回值,这不会使生成失败,但会返回状态代码。例如:
def statusCode = sh script:script, returnStatus:true
然后,可以使用此状态代码设置当前生成的结果。
您可以使用:
currentBuild.result ='FAILURE'
或currentBuild.result ='UNSTABLE'
分别将步骤标记为红色/黄色。在这种情况下,构建仍将处理下一步。error"Your error message"
如果您希望构建失败并立即退出。