我有一个 Jenkins 2.0 作业,我要求用户通过 Jenkins“Active Choices Reactive Parameter”选择要执行作业的服务器列表。作业将针对的这些服务器是 AWS EC2 实例。我想查询 AWS CLI 以获取服务器列表,而不是在“Active Choices Reactive Parameter”中对可用服务器进行硬编码。
一些注意事项:
返回 ["10.1.1.1", "10.1.1.2", 10.1.1.3"]
我可以直接在托管 Jenkins 的 EC2 实例上运行以下命令:
aws ec2 describe-instances --region us-east-2 --filters
"Name=tag:Env,Values=qa" --query
"Reservations[*].Instances[*].PrivateIpAddress" | grep -o
'\"[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\"' | awk
{'printf $0 ", "'} | awk {'print "[" $0'} | awk {'gsub(/^[ \t]+|[
\t]+$/, ""); print'} | awk {'print substr ($0, 1, length($0)-1)'} |
awk {'print $0 "]"'}
这将返回以下内容,这是“Active Choices Reactive Parameter”所期望的格式:
["10.1.1.1", "10.1.1.2", 10.1.1.3"]
因此,在“Active Choices Reactive Parameter”的“Script”文本区域中,我有以下脚本。问题是我的服务器列表从未填充过。我已经尝试了这个脚本的许多变体,但都没有运气。有人可以告诉我我哪里出错了,我可以做些什么来纠正这个脚本,以便我的服务器 IP 地址列表动态加载到 Jenkins 作业中?
def standardOut = new StringBuffer(), standardErr = new StringBuffer()
def command = $/
aws ec2 describe-instances --region us-east-2 --filters "Name=tag:Env,Values=qaint" --query "Reservations[*].Instances[*].PrivateIpAddress" |
grep -o '\"[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\"' |
awk {'printf $0 ", "'} |
awk {'print "[" $0'} |
awk {'gsub(/^[ \t]+|[ \t]+$/, ""); print'} |
awk {'print substr ($0, 1, length($0)-1)'} |
awk {'print $0 "]"'}
/$
def proc = command.execute()
proc.consumeProcessOutput(standardOut, standardErr)
proc.waitForOrKill(1000)
return standardOut
最佳答案
我尝试执行您的脚本,但标准错误有一些错误,看起来 groovy 不喜欢 AWS CLI 中的双引号。这是一种不使用 awk 的更干净的方法
def command = 'aws ec2 describe-instances \
--filters Name=tag:Name,Values=Test \
--query Reservations[*].Instances[*].PrivateIpAddress \
--output text'
def proc = command.execute()
proc.waitFor()
def output = proc.in.text
def exitcode= proc.exitValue()
def error = proc.err.text
if (error) {
println "Std Err: ${error}"
println "Process exit code: ${exitcode}"
return exitcode
}
//println output.split()
return output.split()
关于amazon-web-services - 查询 AWS CLI 以填充 Jenkins "Active Choices Reactive Parameter"(Linux),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48982349/