Назначить извлеченные значения из команды aws переменным в конвейере jenkins - PullRequest
0 голосов
/ 31 мая 2018
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 Спасибо

1 Ответ

0 голосов
/ 31 мая 2018

Ваша текущая реализация не назначает никаких переменных, оболочек, 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]}"
                    }
                }
            }
        }
    }
}

(я выдумал пару таких вещей для моего минимального теста; пожалуйста, опубликуйте все ошибки, которые вы получите, и мы все исправим)

...