使用“|”执行 aws 命令时未在 Groovy 中获得输出和 "sed"
Not getting output in Groovy when execute aws command with "|" and "sed"
我正在使用 Jenkins 的 Active 选择参数来填充 RDS 实例类型列表
我是 groovy 的新手,正在尝试使用 sed 从 groovy 脚本中获取 aws cli 的值。
下面的代码工作正常,但是由于有多个许可选项,它给出了重复的条目
def command = "aws rds describe-orderable-db-instance-options --engine mysql --engine-version 8.0.20 --query OrderableDBInstanceOptions[*].DBInstanceClass --output text"
def proc = command.execute()
proc.waitFor()
def instances = proc.in.text.readLines()
return instances
为了删除重复的条目,我厌倦了下面的代码,但它不会显示任何输出
第一次尝试
def command = "aws rds describe-orderable-db-instance-options --engine mysql --engine-version 8.0.20 --query OrderableDBInstanceOptions[*].DBInstanceClass --output text | sed -e 'y/\t/\n/' | sort -u"
def proc = command.execute()
proc.waitFor()
def instances = proc.in.text.readLines()
return instances
第二次尝试
def command = """
aws rds describe-orderable-db-instance-options --engine mysql --engine-version 8.0.20 --query OrderableDBInstanceOptions[*].DBInstanceClass --output text | sed -e 'y/\t/\n/' | sort -u
"""
def proc = ['bash', '-c', command].execute()
proc.waitFor()
def instances = proc.in.text.readLines()
return instances
A上面的代码给出了以下错误
java.io.IOException: Cannot run program "sh": CreateProcess error=2, The system cannot find the file specified
at ConsoleScript18.run(ConsoleScript18:9)
Caused by: java.io.IOException: CreateProcess error=2, The system cannot find the file specified
第三次尝试
def module = sh(script: """aws rds describe-orderable-db-instance-options --engine mysql --engine-version 8.0.20 --query OrderableDBInstanceOptions[*].DBInstanceClass --output text | sed -e 'y/\t/\n/' | sort -u """,returnStdout: true).trim()
echo "${module}"
给出以下错误
groovy.lang.MissingMethodException: No signature of method: ConsoleScript26.sh() is applicable for argument types: (LinkedHashMap) values: [[script:aws rds describe-orderable-db-instance-options --engine mysql --engine-version 8.0.20 --query OrderableDBInstanceOptions[*].DBInstanceClass --output text | sed -e 'y/ /
/' | sort -u , ...]]
Possible solutions: is(java.lang.Object), use([Ljava.lang.Object;), NV([Ljava.lang.Object;), run(), run(), any()
非常感谢对此的帮助。
我花了很多时间才解决的。
首先,我尝试使用普通的 bash 实用程序(即 sed
)以删除重复项,但是很难与 groovy 一起使用。
因此使用 groovy 的 unique
功能将其删除。
下面是 Jenkin 的 Active 选择参数 插件的工作代码。所以如果有人遇到这类问题可以使用它。
def cmd = "aws rds describe-orderable-db-instance-options --engine mysql --engine-version 8.0.20 --query [OrderableDBInstanceOptions[*].DBInstanceClass] --output text"
def output = cmd.execute()
output.waitFor()
def error = output.err.text
def instances = output.text.tokenize().toUnique()
if (error) {
return [error]
} else {
return instances
}
我正在使用 Jenkins 的 Active 选择参数来填充 RDS 实例类型列表
我是 groovy 的新手,正在尝试使用 sed 从 groovy 脚本中获取 aws cli 的值。
下面的代码工作正常,但是由于有多个许可选项,它给出了重复的条目
def command = "aws rds describe-orderable-db-instance-options --engine mysql --engine-version 8.0.20 --query OrderableDBInstanceOptions[*].DBInstanceClass --output text"
def proc = command.execute()
proc.waitFor()
def instances = proc.in.text.readLines()
return instances
为了删除重复的条目,我厌倦了下面的代码,但它不会显示任何输出
第一次尝试
def command = "aws rds describe-orderable-db-instance-options --engine mysql --engine-version 8.0.20 --query OrderableDBInstanceOptions[*].DBInstanceClass --output text | sed -e 'y/\t/\n/' | sort -u"
def proc = command.execute()
proc.waitFor()
def instances = proc.in.text.readLines()
return instances
第二次尝试
def command = """
aws rds describe-orderable-db-instance-options --engine mysql --engine-version 8.0.20 --query OrderableDBInstanceOptions[*].DBInstanceClass --output text | sed -e 'y/\t/\n/' | sort -u
"""
def proc = ['bash', '-c', command].execute()
proc.waitFor()
def instances = proc.in.text.readLines()
return instances
A上面的代码给出了以下错误
java.io.IOException: Cannot run program "sh": CreateProcess error=2, The system cannot find the file specified
at ConsoleScript18.run(ConsoleScript18:9)
Caused by: java.io.IOException: CreateProcess error=2, The system cannot find the file specified
第三次尝试
def module = sh(script: """aws rds describe-orderable-db-instance-options --engine mysql --engine-version 8.0.20 --query OrderableDBInstanceOptions[*].DBInstanceClass --output text | sed -e 'y/\t/\n/' | sort -u """,returnStdout: true).trim()
echo "${module}"
给出以下错误
groovy.lang.MissingMethodException: No signature of method: ConsoleScript26.sh() is applicable for argument types: (LinkedHashMap) values: [[script:aws rds describe-orderable-db-instance-options --engine mysql --engine-version 8.0.20 --query OrderableDBInstanceOptions[*].DBInstanceClass --output text | sed -e 'y/ /
/' | sort -u , ...]]
Possible solutions: is(java.lang.Object), use([Ljava.lang.Object;), NV([Ljava.lang.Object;), run(), run(), any()
非常感谢对此的帮助。
我花了很多时间才解决的。
首先,我尝试使用普通的 bash 实用程序(即 sed
)以删除重复项,但是很难与 groovy 一起使用。
因此使用 groovy 的 unique
功能将其删除。
下面是 Jenkin 的 Active 选择参数 插件的工作代码。所以如果有人遇到这类问题可以使用它。
def cmd = "aws rds describe-orderable-db-instance-options --engine mysql --engine-version 8.0.20 --query [OrderableDBInstanceOptions[*].DBInstanceClass] --output text"
def output = cmd.execute()
output.waitFor()
def error = output.err.text
def instances = output.text.tokenize().toUnique()
if (error) {
return [error]
} else {
return instances
}