Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Jenkins Tips 002: 处理Shell返回字符串为数组

Jenkins Tips 002: 处理Shell返回字符串为数组

作者头像
Peter Shen
发布于 2020-07-02 06:43:14
发布于 2020-07-02 06:43:14
1.6K00
代码可运行
举报
文章被收录于专栏:持续集成持续集成
运行总次数:0
代码可运行

每期用简短的图文描述一个 Jenkins 小技巧

问题

想要把 Linux 上不同的文本数据通过 Jenkins 发送邮件给不同的人。

思路

想通过 Shell 先对数据进行处理,然后返回到 Jenkins pipeline 里,但只能得到 Shell 返回的字符串,因此需要在 Jenkinsfile 里把字符串处理成数组,然后通过一个 for 循环对数组中的值进行处理。

以下是要处理的文本数据:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# Example
$ ls
fail-list-user1.txt  fail-list-user2.txt  fail-list-user3.txt

要将以上文件通过 Jenkins 分别进行处理,得到用户 user1,user2,user3 然后发送邮件。

解决

字符串截取

通过 Shell 表达式只过滤出 user1 user2 user3

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# list 所有以 fail-list 开头的文件,并赋给一个数组 l
l=$(ls -a fail-list-*)

for f in $l;
do 
  f=${f#fail-list-} # 使用#号截取左边字符
  f=${f%.txt}       # 使用%号截取右边字符
  echo $f           # 最终输出仅包含user字符串
done

测试结果如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ ls
fail-list-user1.txt  fail-list-user2.txt  fail-list-user3.txt
$ l=$(ls -a fail-list-*) && for f in $l; do f=${f#fail-list-}; f=${f%.txt}; echo $f ; done;
user1
user2
user3

处理字符串为数组

以下在 Jenkinsfile 使用 groovy 将 Shell 返回的字符串处理成字符数组。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// Jenkinsfile
// 忽略 stage, steps 等其他无关步骤
...

scripts {
  // 将 Shell 返回字符串赋给 owners 这个变量。注意在 $ 前面需要加上 \ 进行转义。
  def owners = sh(script: "l=\$(ls -a fail-list-*) && for f in \$l; do f=\${f#fail-list-}; f=\${f%.txt}; echo \$f ; done;", returnStdout:true).trim()

  // 查看 owners 数组是否为空,isEmpty() 是 groovy 内置方法。
  if ( ! owners.isEmpty() ) {
    // 通过 .split() 对 owners string 进行分解,返回字符串数组。然后通过 .each() 对返回的字符串数组进行循环。
    owners.split().each { owner ->
      // 打印最终的用户返回
      println "owner is ${owner}"

      // 发送邮件,例子
      email.SendEx([
          'buildStatus'  : currentBuild.currentResult,
          'buildExecutor': "${owner}",
          'attachment'   : "fail-list-${owner}.txt"
      ])
    }
  }
}

最终完成了通过 Groovy 将 Shell 返回的字符串处理成字符数组,实现上述例子中对不同人进行邮件通知的需求。

希望以上例子对你做其他类似需求的时候有所启示和帮助。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-06-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DevOps攻城狮 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
java中json字符串和java对象的转换「建议收藏」
根目录下创建lib目录,将解析器文件放在lib目录下,并对lib右键选择add as library产生依赖
全栈程序员站长
2022/10/05
3.7K0
java中json字符串和java对象的转换「建议收藏」
字符串转json对象 java_js中对象转字符串的方法
普通转换(String jsonStr = “{“username”:“张三”,“password”:“123456”}”;)
全栈程序员站长
2022/10/01
18.4K0
字符串转json对象 java_js中对象转字符串的方法
Kotlin入门(5)字符串及其格式化
上一篇文章介绍了数组的声明和操作,包括字符串数组的用法。注意到Kotlin的字符串类也叫String,那么String在Java和Kotlin中的用法有哪些差异呢?这便是本文所要阐述的内容了。   首先要说明的是String类型与基本变量类型之间的转换方式,在《Kotlin入门(3)基本变量类型的用法》中,提到基本变量类型可以通过toString方法转为字符串类型。反过来,字符串类型又该如何转为基本变量类型?如果使用Java编码,有以下几种转换方式: 字符串转整型:调用方法Integer.parseInt(***) 字符串转长整型:调用方法Long.parseLong(***) 字符串转浮点数:调用方法Float.parseFloat(***) 字符串转双精度数:调用方法Double.parseDouble(***) 字符串转布尔型:调用方法Boolean.parseBoolean(***) 字符串转字符数组:调用String对象的toCharArray方法   就上面的转换情况来看,Java的实现方式比较繁琐,既需要其它类型的类名,有需要其它类型的转换方法。而在Kotlin这边,转换类型相对简单,并且与基本变量类型之间的转换保持一致,具体说明如下: 字符串转整型:调用String对象的toInt方法 字符串转长整型:调用String对象的toLong方法 字符串转浮点数:调用String对象的toFloat方法 字符串转双精度数:调用String对象的toDouble方法 字符串转布尔型:调用String对象的toBoolean方法 字符串转字符数组:调用String对象的toCharArray方法 显而易见,Kotlin对字符串的类型转换更友好,也更方便记忆。 当然,转换类型只是字符串的基本用法,还有更多处理字符串的其他用法,比如查找子串、替换子串、截取指定位置的子串、按特定字符分隔子串等等,在这方面Kotlin基本兼容Java的相关方法。对于查找子串的操作,二者都调用indexOf方法;对于截取指定位置子串的操作,二者都调用substring方法;对于替换子串的操作,二者都调用replace方法;对于按特定字符分隔子串的操作,二者都调用split方法。 下面是Kotlin使用indexOf和substring方法的代码例子:
aqi00
2019/01/18
2K0
C++ 字符串操作函数
由于字符串使用广泛,C和C++提供了一些字符串函数,包括字符串连接函数strcat,字符串复制函数strcpy,字符串比较函数strcmp,字符串长度函数strlen,在C语言中被定义在string.h中定义。在C++中被定义在cstring和string中。
chaibubble
2019/05/26
2.7K0
蓝桥杯省赛基础知识点 | 简单字符串处理
简单字符串题目,也就是不涉及复杂字符串算法的简单题。在蓝桥杯省赛中很常见,几乎每届都有。
张哥编程
2024/12/13
1930
php用空格分隔字符串,分割字符串空格[通俗易懂]
String[] data = s.split(“@”); // 以@分割字符串,获得@后的值。
全栈程序员站长
2022/11/16
6.6K0
令人头大的字符串—算法处理
字符串可以看成是字符组成的数组。由于字符串是程序里经常需要处理的数据类型,因此有很多针对字符串处理的题目,以下是一些常见的类型。
Wu_Candy
2022/07/04
2100
令人头大的字符串—算法处理
NO.3 Shell脚本
程序在执行之前需要一个专门的编译过程,把程序编译成 为机器语言文件,运行时不需要重新翻译,直接使用编译的结果就行了。程序执行效率高,依赖编译器,跨平台性差些。如C、C++
py3study
2020/01/10
9120
C语言中常用的6个字符串处理函数
功能:把源字符串数组中的字符串复制到目的字符串数组中,字符串结束标志"\0"也一同复制
C语言中文社区
2022/05/30
8190
C语言中常用的6个字符串处理函数
Linux用户管理
用户管理 添加用户 useradd或者adduser。其实adduser是useradd的一个软连接。以useradd为例,其用法为 useradd  [option]  USERNAME [root@compute ~]# ll `which adduser` lrwxrwxrwx. 1 root root 7 5月 26 14:21 /usr/sbin/adduser -> useradd -u  指定新添加用户的UID,不过根据规定,普通用户的UID必须大于499且不能和已存在的UID重复。 [ro
人生不如戏
2018/05/30
3.6K0
【重拾C语言】六、批量数据组织(三)数组初值;字符串、字符数组、字符串数组;类型定义 typedef
本文介绍了C语言:数组初值;字符串、字符数组、字符串数组;类型定义 typedef
Qomolangma
2024/07/30
1330
【重拾C语言】六、批量数据组织(三)数组初值;字符串、字符数组、字符串数组;类型定义 typedef
Shell笔记4:shell编程,字符串处理与正则表达式
1.字符串处理 a.子串截取 方法1:${var:起始位置:长度},编号从0开始,可省略 方法2:expr substr expr substr "$var" 起始位置 长度 编号从1开始 方法3:使用cut工具 echo $var |cut -b 起始位置-结束位置 编号从1开始
陪你听风
2021/03/31
6900
江哥带你玩转C语言| 12 -二维数组和字符串
如果觉得文章对你有帮助,点赞、收藏、关注、评论,一键四连支持,你的支持就是江哥持续更新的动力。
极客江南
2021/07/11
1.5K0
Java开发知识之Java字符串类
  任何语言中.字符串都是很重要的.都涉及到字符串的处理. 例如C++中. 字符串使用内存. 并提供相应的函数进行处理 strcmp strcat strcpy....等等
IBinary
2019/05/25
4530
shell 快速入门
变量 #!/bin/bash # 变量 echo "01_变量.sh" # 变量定义与赋值,等号两边不能用空格分开 name=hahahaha echo $name echo 也使用 {} 输出为 ${name} # 一些特殊变量 test_func() { echo "function name is $FUNCNAME" } test_func echo $HOSTNAME echo $HOSTTYPE echo $MATCHTYPE echo $LANG echo $PWD # echo $
祥祥
2021/01/08
2K0
Avro介绍[通俗易懂]
1.丰富的数据结构 2.使用快速的压缩二进制数据格式 3.提供容器文件用于持久化数据 4.远程过程调用RPC 5.简单的动态语言结合功能,Avro 和动态语言结合后,读写数据文件和使用 RPC 协议都不需要生成代码,而代码生成作为一种可选的优化只值得在静态类型语言中实现。
全栈程序员站长
2022/11/15
2.5K0
C语言中字符数组只能存放字符串?字符数组和字符串的唯一区别?
字符数组本意就是是指用来存放字符数据的数组。字符数组的元素是字符类型的。字符数组用于存放字符或字符串。
Twcat_tree
2022/11/30
8740
C++ 字符串类,字符串变量与字符串数组
在C语言中,应用字符串需要定义字符数组,字符串需要存放在字符数组中。然后利用各种字符串操作函数对其操作。 http://blog.csdn.net/chaipp0607/article/details/56676791
chaibubble
2022/05/07
6130
【JavaSE专栏38】Java常用类 String 解析,字符串的花式操作
本文讲解了 Java 中常用类 String 的语法、使用说明和应用场景,并给出了样例代码。
Designer 小郑
2023/08/02
2840
【JavaSE专栏38】Java常用类 String 解析,字符串的花式操作
字符串操作
字符串处理函数在Excel VBA中使用频率非常的高,很多函数都非常的好理解,只要多使用一般都可以掌握。
xyj
2020/07/28
1K0
字符串操作
相关推荐
java中json字符串和java对象的转换「建议收藏」
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验