将aws命令中提取的值分配给jenkins管道中的变量

时间:2018-05-31 16:02:28

标签: bash jenkins groovy jenkins-pipeline aws-cli

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实例的statexxx,并且能够获取它们的值 但是,当我尝试echo时,我会将值设为null。因此,他们没有被分配到${id}{state}变量 有什么办法可以将它们分配给jenkins pipeline中的上述变量 注意:不要使用jq 感谢

1 个答案:

答案 0 :(得分:1)

您当前的实现并未分配任何变量,shell,Jenkins或其他。 idinstanceState只是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

(为了我的最小测试用例,我手工捏造了一些这样的项目;请发布你得到的任何错误,我们会把事情搞清楚)