我有一个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
3条答案
按热度按时间xzlaal3s1#
我试着执行你的脚本和standardErr有一些错误,看起来像groovy不喜欢AWS CLI中的双引号。这里有一个不使用awk的更干净的方法
acruukt92#
此脚本使用Jenkins Active Choices参数,并返回IP地址列表:
kcrjzv8t3#
我已经厌倦了所有上述选项,我没有得到的价值,可以有人的意见,这是正确的格式
[$class:'ChoiceParameter',choiceType:'PT_SINGLE_SELECT',描述:'从下拉列表中选择环境',filterLength:1、可过滤:false,name:《金象》,剧本:[$class:'GroovyScript',script:[类路径:[],sandbox:true,脚本:"" def aws_cmd ="aws ec2 describe-instances
Name = tag:env,Values = dev