嗨,我正在尝试仅列出s3中特定存储桶中的文件名,并且在aws cli中成功使用了以下命令,
aws s3 ls s3://inc-eb-deployments/my-bucket/ | awk '{ print $4 }'
但是我想将此AWS cli命令添加到Jenkins“主动选择参数”插件中的常规脚本中,如下所示添加它,
def sout = new StringBuilder(), serr = new StringBuilder()
def proc = 'aws s3 ls s3://inc-eb-deployments/my-bucket/ | awk '{ print $4 }' '.execute()
proc.consumeProcessOutput(sout, serr)
proc.waitForOrKill(2000)
def values = "$sout".split('.zip')
def trimmedValues
def parameters=[]
values.each { println "${it}" }
def cleanValues = "$sout".split('inc')
def last = cleanValues.last().split('.zip')[0]
cleanValues.each { "${it}".toString();
trimmedValues = "${it}".trim();
parameters<<trimmedValues
}
parameters.remove(parameters.size() - 1);
parameters.add(last)
parameters
但是运行作业时,我在构建页面上看不到任何文件名输出。
任何人都可以帮助我这个Groovy脚本的问题在哪里?
这不起作用,因为String.execute()会执行“愚蠢的事情”(在空白处拆分),并且执行根本不运行shell,而只是运行exec
。如果您想在常规世界中使用Shellism,请使用:
def proc = ["/bin/sh", "-c", '''aws s3 ls s3://inc-eb-deployments/my-bucket/ | awk '{ print $4 }'''''].execute()