[S3存储桶未在Jenkins活动选择参数插件中列出

问题描述 投票:0回答:1

嗨,我正在尝试仅列出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

但是运行作业时,我在构建页面上看不到任何文件名输出。

enter image description here

任何人都可以帮助我这个Groovy脚本的问题在哪里?

jenkins amazon-s3 groovy jenkins-plugins
1个回答
0
投票

这不起作用,因为String.execute()会执行“愚蠢的事情”(在空白处拆分),并且执行根本不运行shell,而只是运行exec。如果您想在常规世界中使用Shellism,请使用:

def proc = ["/bin/sh", "-c", '''aws s3 ls s3://inc-eb-deployments/my-bucket/ | awk '{ print $4 }'''''].execute()
© www.soinside.com 2019 - 2024. All rights reserved.