简体   繁体   中英

Assign extracted values from aws command to variables in jenkins pipeline

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}"  
                }
            }
        }
    }
}

I am trying to extract the instace id and state of the xxx instance using the above command and able to get the values of them But when I try to echo them I get the values as null . So they are not being assigned to the ${id} and {state} variables Is there any way I could assign them to the above variables in jenkins pipeline Note: Don't want to use jq Thanks

Your current implementation doesn't assign any variables, shell, Jenkins, or otherwise. id and instanceState are just aliases for other fields in the context of the aws command. In order to have access to those values in the context of the pipeline, I'd recommend combining the output of the sh step with the readJSON step (it's part of the pipeline utility steps plugin ). Then you can do something like this:

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]}"
                    }
                }
            }
        }
    }
}

(I hand-fudged a couple of those items for my minimal test case; please post any errors you get and we'll clean things up)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM