def id
def state
pipeline {
agent any
stages{
stage('aws') {
steps {
script{
/*extract load generator instanceId*/
sh "aws ec2 describe-instances --filters 'Name=tag:Name,Values=xxx' --output text --query 'Reservations[*].Instances[*].{id:InstanceId,state:State.Name}' --region us-east-1"
echo "id and state: ${id} ${state}"
}
}
}
}
}
我正在尝试使用上面的命令提取instace id
实例的state
和xxx
,并且能够获取它们的值
但是,当我尝试echo
时,我会将值设为null
。因此,他们没有被分配到${id}
和{state}
变量
有什么办法可以将它们分配给jenkins pipeline
中的上述变量
注意:不要使用jq
感谢
答案 0 :(得分:1)
您当前的实现并未分配任何变量,shell,Jenkins或其他。 id
和instanceState
只是aws命令上下文中其他字段的别名。为了能够在管道的上下文中访问这些值,我建议将sh
步骤的输出与readJSON
步骤(它的def id
def state
pipeline {
agent any
stages{
stage('aws') {
steps {
script{
/*extract load generator instanceId*/
instanceInfo = sh (
script: "aws ec2 describe-instances --filters 'Name=tag:Name,Values=xxx' --output text --query 'Reservations[*].Instances[*].{id:InstanceId,instanceState:State.Name}' --region us-east-1"
returnStdout: true
).trim()
instanceJSON = readJSON text: instanceInfo
instanceJSON.each { instance ->
echo "${instance.id[0]}: ${instance.instanceState[0]}"
}
}
}
}
}
}
步骤的组合部分相结合{3}})。然后你可以做这样的事情:
IRule
(为了我的最小测试用例,我手工捏造了一些这样的项目;请发布你得到的任何错误,我们会把事情搞清楚)