绝对詹金斯管道/时髦菜鸟在这里,我有一个舞台
stage('Building and Deploying'){ def build = new Build() build.deploy() }
使用共享库,其源在Build.groovy这里:
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参数检查返回值sh,这不会使构建失败,但会返回状态代码。例如:
returnStatus
def statusCode = sh script:script, returnStatus:true
然后,您可以使用此状态代码来设置当前构建的结果。
您可以使用 :
currentBuild.result = 'FAILURE'
currentBuild.result = 'UNSTABLE'
error "Your error message"