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


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

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

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

# Example$ lsfail-list-user1.txt  fail-list-user2.txt  fail-list-user3.txt

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

解决
字符串截取
通过 Shell 表达式只过滤出 user1 user2 user3

# list 所有以 fail-list 开头的文件,并赋给一个数组 ll=$(ls -a fail-list-*)for f in $l;do   f=${f#fail-list-} # 使用#号截取左边字符  f=${f%.txt}       # 使用%号截取右边字符  echo $f           # 最终输出仅包含user字符串done

测试结果如下:

$ lsfail-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;user1user2user3

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

// 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 返回的字符串处理成字符数组,实现上述例子中对不同人进行邮件通知的需求。

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

©著作权归作者所有:来自51CTO博客作者mob604756e7db9c的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. php字符串函数
  2. php常用数组函数
  3. 3-12(队列的结束以及树的开始)
  4. php数据类型的转换与检测、变量的基础知识
  5. JDK9对String字符串的新一轮优化,不可不知
  6. 用python 实现乱序打印“helloworld” 中的每个字母
  7. php的初步认识与常用数据类型
  8. 如何去除字符串中的 "\n" ?80% 的同学错了!
  9. python 基础学习系列(一)

随机推荐

  1. android仿漫画源码、抽奖转盘、Google相
  2. 开关
  3. Android关机重启
  4. Android NDK 简介(Android NDK 教程 一)
  5. 《Android系统学习》第十一章:Android应用
  6. 工具收藏
  7. [置顶] 入门Android开发--android基础
  8. 学习新手给Android新手的一些学习建议
  9. android 布局xml中 android:fitsSystemWi
  10. tools:context=".MainActivity的作用