为了账号安全,请及时绑定邮箱和手机立即绑定

Jenkins/Groovy - 对于数组中的每个项目,使用项目中的变量执行 shell 脚本

Jenkins/Groovy - 对于数组中的每个项目,使用项目中的变量执行 shell 脚本

泛舟湖上清波郎朗 2021-08-19 17:46:06
我有一个数组和一个函数。函数调用 context.sh 并使用我想传递的变量执行 shell 命令(此循环中的下一个数组)。目标:Grep 文件,每次循环使用数组中的项目如果字符串不为空(从 shell 脚本返回一个值)打印带有消息和错误的行将值 'true' 导出到名为 'errors found' 的变量。def grepLogs(String) {    def errorsFound = falseList<String> list = new ArrayList<String>()list.add("some-exclude")list.add("anotherone")list.add("yes")for (String item : list) {    System.out.println(item)    context.sh "errorFinder=$(cat logfile.log | egrep 'error|ERROR'| grep -v ${list()})"    if (errorFinder) {        println "Errors in log file " + errorFinder        errorsFound = true    }}    println "No errors found." }到目前为止,我无法设法检查数组中的每个项目并更改值。我该如何实施?
查看完整描述

1 回答

?
繁星coding

TA贡献1797条经验 获得超4个赞

猜你只是想从结果中排除带有一些单词的行。


只需将转换list为用|(管道)分隔的字符串。


所以 shell 命令看起来像这样:


cat logfile.log | grep 'error|ERROR'| grep -v 'some-exclude|anotherone|yes'

并使用returnStdout 参数将stdout 捕获到 groovy 变量中


所以sh电话应该是这样的:


def list = [ "some-exclude", "anotherone", "yes" ]

def cmd = "cat logfile.log | grep 'error|ERROR'| grep -v '${ list.join('|') }'"

def errors = sh( returnStdout: true, script: cmd )

if( errors.trim() ){

    println "errors found: ${errors}"

}


查看完整回答
反对 回复 2021-08-19
  • 1 回答
  • 0 关注
  • 169 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信