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

开发 前端
如果想要CI/CD持续稳定的运行,那么pipeline脚本的稳定性就是最核心的问题,那么如何才能让pipeline脚本稳定的运行呢?就是应用异常!这里以脚本化Pipeline script为例进行讲解。

[[428277]]

如果想要CI/CD持续稳定的运行,那么pipeline脚本的稳定性就是最核心的问题,那么如何才能让pipeline脚本稳定的运行呢?就是应用异常!这里以脚本化Pipeline script为例进行讲解,如果您使用声明式pipeline script,请把异常处理机制放在script {}中(这里不对声明式pipeline script做详细介绍)。

编码式Pipline的异常使用

Pipeline 处理异常的形式如下:

  1. node { 
  2. sh './set-up.sh' 
  3. try { 
  4. sh 'might fail' 
  5. echo 'Succeeded!' 
  6. } catch (err) { 
  7. echo "Failed: ${err}" 
  8. } finally { 
  9. sh './tear-down.sh' 
  10. echo 'Printed whether above succeeded or failed.' 

异常通用概念

在这里需要介绍一下异常相关的基础概念:

Exception

检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略。

运行时异常:运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略。

Error

错误:错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。例如,当栈溢出时,一个错误就发生了,它们在编译也检查不到的。下图显示了如何组织Groovy中的异常层次结构。它都基于Java中定义的层次结构。

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

try和catch的使用

方法使用try和catch关键字的组合捕获异常。 try/catch块放在可能生成异常的代码周围。

  1. try{ 
  2. //保护的代码 
  3. } catch(ExceptionName e1) { 
  4. //处理异常的代码 

 可以有多个catch块来处理多种类型的异常。对于每个catch块,根据引发的异常类型,您将编写代码来相应地处理它。

  1. try { 
  2. def arr = new int[3]; 
  3. arr[5] = 5; 
  4. catch(ArrayIndexOutOfBoundsExceptionex) { 
  5. println("捕获Array out of Bounds exception"); 
  6. catch(IOException ex) { 
  7. println("捕获 io exception"); 

 结果输出

捕获Array out of Bounds exception

finally块

finally块遵循try块或catch块。无论发生异常,最终都会执行最后一段代码。

  1. try { 
  2. def arr = new int[3]; 
  3. arr[5] = 5; 
  4. catch(ArrayIndexOutOfBoundsExceptionex) { 
  5. println("捕获Array out of Bounds exception"); 
  6. catch(IOException ex) { 
  7. println("捕获 io exception"); 
  8. finally{ 
  9. println("执行final 块"); 

 结果输出

捕获Array out of Boundsexception

执行final块

备注:如果大家不确认具体的异常类型直接使用exception(或者exp)就可以,因为它是各种exception的父类!

error的处理

当我们需要处理错误(错误不是异常,而是脱离程序员控制的问题。)的时候,就需要使用error(或者err)了。

  1. try { 
  2. //保护的代码 
  3. catch(error) { 
  4. //处理错误的代码 

稳定代码的设计核心点

如果想使我们的代码稳定运行,既处理异常又捕获error,可以这样处理

  1. try { 
  2. //保护的代码 
  3. catch(err) { 
  4. //处理错误的代码 
  5. catch(exp){ 
  6. //处理异常的代码 

 在pipeline中的应用如下所示,这样设计可以确保我们的pipeline稳定运行。

  1. node { 
  2. try { 
  3. //pipeline运行的脚本 
  4. catch(err) { 
  5. //处理pipeline中代码的异常 
  6. catch(exp){ 
  7. //处理pipeline中遇到的错误信息 

 

责任编辑:姜华 来源: 今日头条
相关推荐

2021-10-15 09:16:05

PipelineDevopsJenkins

2016-02-18 10:09:23

12306核心思路架构

2020-10-13 21:25:15

DevOps核心

2020-11-09 07:29:12

ReentrantLo源码公平锁

2017-04-24 13:51:16

设计师分析

2024-08-23 08:56:59

2022-02-24 08:18:12

稳定性高可用可用性

2020-11-05 09:04:52

MySQL随机恢复

2013-05-14 10:05:10

Android开发游戏设计

2021-10-08 08:38:00

Pipelineshell命令Jenkins

2022-10-20 12:04:08

2022-07-29 09:35:25

WAF溯源识别

2011-08-18 13:57:47

Star Schema

2023-05-10 15:08:00

Pipeline设计模式

2013-12-13 16:00:39

社交类APP设计思路产品经理

2010-07-14 09:01:07

架构设计

2020-07-13 08:10:13

软件设计系统

2010-08-30 10:16:32

2010-07-05 16:15:41

流量控制

2011-12-06 09:24:10

网页设计
点赞
收藏

51CTO技术栈公众号