当前位置: 首页 > 科技观察

干货!流水线脚本稳定运行的核心设计思路

时间:2023-03-16 01:19:07 科技观察

想要CI/CD持续稳定运行,那么流水线脚本的稳定性就是核心问题,那么如何让流水线脚本稳定运行呢?是应用异常!这里以脚本化的Pipeline脚本为例。如果使用声明式管道脚本,请将异常处理机制放在script{}中(这里不再详细介绍声明式管道脚本)。CodedPipeline异常使用Pipeline以如下形式处理异常:node{sh'./set-up.sh'try{sh'mightfail'echo'Succeeded!'}catch(err){echo"Failed:${err}"}finally{sh'./tear-down.sh'}echo'Printedwhetherabovesucceededorfailed.'}异常的一般概念这里需要介绍一下异常相关的基本概念:ExceptionCheckedexception:最具代表性的checkedexception是用户错误或者问题引起的异常,是程序员无法预见的。例如,试图打开一个不存在的文件时会发生异常,而这些异常在编译时不能简单地忽略。运行时异常:运行时异常是程序员可以避免的异常。与检查异常相反,运行时异常可以在编译时被忽略。错误:错误不是异常,而是程序员无法控制的问题。错误通常在代码中被忽略。例如,当堆栈溢出时,会发生错误,并且在编译时不会检查它们。下图显示了Groovy中的异常层次结构是如何组织的。这一切都基于Java中定义的层次结构。如何使用try和catch使用try和catch关键字的组合来捕获异常。Try/catch块放置在可能产生异常的代码周围。try{//protectedcode}catch(ExceptionNamee1){//exceptionhandlingcode}可以有多个catch块来处理多种类型的异常。对于每个catch块,根据抛出的异常类型,您将编写相应的代码来处理它。try{defarr=newint[3];arr[5]=5;}catch(ArrayIndexOutOfBoundsExceptionex){println("CatchArrayoutofBoundsexception");}catch(IOExceptionex){println("Catchioexception");}结果输出捕获Arrayout边界异常finally块finally块跟在try块或catch块之后。不管异常如何,最后一段代码最终都会被执行。try{defarr=newint[3];arr[5]=5;}catch(ArrayIndexOutOfBoundsExceptionex){println("CatchArrayoutofBoundsexception");}catch(IOExceptionex){println("Catchioexception");}finally{println("执行finalblock");}结果输出捕获ArrayoutofBoundsexception执行finalblock备注:如果不确认具体异常类型,可以直接使用exception(或exp),因为它是的父类各种异常!错误处理当我们需要处理错误时(错误不是异常,而是程序员无法控制的问题。),我们需要使用error(或err)。try{//受保护的代码}catch(error){//处理错误代码}稳定代码设计的核心点如果想让我们的代码稳定运行,处理异常,捕获错误,可以处理try{//protect的代码}catch(err){//错误处理代码}catch(exp){//异常处理代码}在流水线中的应用如下所示,这样的设计可以保证我们流水线的稳定运行。node{try{//pipelinerunscript}catch(err){//处理pipeline中代码的异常}catch(exp){//处理pipeline中遇到的错误信息}}