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

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

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

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

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

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

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

# 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

测试结果如下:

$ 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 返回的字符串处理成字符数组
 

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Jenkins的pipeline中处理字符串,可以使用多种方法。首先,可以使用split()方法将一个字符串分割成一个字符串数组。在给定的示例中,line变量使用split(",")方法将lines字符串分割成一个字符串数组。接下来,可以使用size()方法获取字符串数组的长度,以确定字符串数组中元素的数量。然后,可以使用if语句将字符串数组的长度与期望的值进行比较,以执行特定的操作。另外,可以使用equals()方法来判断一个字符串是否为空。在给定的示例中,可以使用"".equals(str_null)来判断str_null字符串是否为空。此外,在Jenkins的pipeline中,还可以使用echo语句输出字符串。在echo语句中,可以使用双引号来包裹字符串,并在其中使用${}来引用变量的值。例如,可以使用echo "line的长度 ${line.size()}"来输出line的长度和line数组的长度。总而言之,在Jenkins的pipeline中,可以使用split()、size()、if语句、equals()和echo语句等方法来处理字符串。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [jenkins部署时,pipeline写法总结](https://blog.csdn.net/weixin_45536587/article/details/124036511)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [jenkinsPipeline](https://download.csdn.net/download/weixin_42169971/16246380)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值