【发布时间】:2018-02-26 06:02:26
【问题描述】:
我有一个 Jenkins 2.0 作业,我要求用户通过 Jenkins “Active Choices Reactive Parameter”选择要执行作业的服务器列表。作业将执行的这些服务器是 AWS EC2 实例。我不想在“Active Choices Reactive Parameter”中对可用服务器进行硬编码,而是想查询 AWS CLI 以获取服务器列表。
几点说明:
- 我已为 Jenkins 2.0 EC2 分配了一个 IAM 角色,该角色具有通过 CLI 查询 AWS 的足够权限。
- AWS CLI 安装在 Jenkins EC2 上。
- 如果我在 Groovy 脚本中硬编码值,“Active Choices Reactive Parameter”将返回一个复选框列表,例如: 返回 ["10.1.1.1", "10.1.1.2", 10.1.1.3"]
- 我知道我的 awk 命令可以改进,但我还不确定如何改进,但我的主要目标是在 Jenkins 中动态加载服务器列表。
我可以直接在托管 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
【问题讨论】:
标签: amazon-web-services jenkins groovy aws-cli