Дженкинс заводной сценарий выпуска - PullRequest
0 голосов
/ 27 сентября 2019

У меня есть скриптовый сценарий Jenkins для конвейера, и он вызывает некоторые команды CLI AWS и пытается проанализировать вывод JSON и передать следующую команду CLI, выполняющуюся в оболочке.У меня всегда возникает проблема со вторым.Не знаю почему.

Первый AWS CLI, который я запускаю, чтобы получить JSON и разобрать имя экземпляра EC2.Второй командой я передаю имя экземпляра сверху и пытаюсь проверить состояние экземпляра, но это всегда не получается.

String logicalenv= 'qa'
try {
    String scriptOutput =  sh(
            script: 'aws cloudformation describe-stack-resource --logical-resource-id someresource --stack-name somestack-' + logicalenv,
            returnStdout: true
            ).trim()
    echo "scriptOutput: ${scriptOutput}"
    def jsonSlurper = new JsonSlurper()
    def object = jsonSlurper.parseText(scriptOutput)
    String instanceId = object.StackResourceDetail.PhysicalResourceId
    echo "instance id : ${instanceId}"

    String scriptOutput2 =  sh(
            script: 'aws ec2 describe-instance-status --instance-ids ' + instanceId,
            returnStdout: true
            ).trim()

    echo "scriptOutput2: ${scriptOutput2}"
}
catch (Exception e) {
    echo "Error running the script"
}
SCRIPT OUTPUT
[Pipeline] sh
+ aws cloudformation describe-stack-resource --logical-resource-id someresource --stack-name somestack-qa
[Pipeline] echo
scriptOutput: {
    "StackResourceDetail": {
        "StackId": "arn:aws:cloudformation:us-east-1:NNNNNN:stack/somestack-qa/xxxx-xxx-xxxx0", 
        "ResourceStatus": "CREATE_COMPLETE", 
        "DriftInformation": {
            "StackResourceDriftStatus": "NOT_CHECKED"
        }, 
        "ResourceType": "AWS::EC2::Instance", 
        "LastUpdatedTimestamp": "2019-09-26T20:50:33.577Z", 
        "StackName": "somestack-qa", 
        "PhysicalResourceId": "i-123456789", 
        "Metadata": "{}", 
        "LogicalResourceId": "someresource"
    }
}
[Pipeline] echo
instance id : i-123456789
[Pipeline] sh
[Pipeline] echo
Error running the script
Was expecting something like below for the second command
{
    "InstanceStatuses": [
        {
            "InstanceId": "i-123456789",
            "InstanceState": {
                "Code": 16,
                "Name": "running"
            },
            "AvailabilityZone": "us-east-xx",
            "SystemStatus": {
                "Status": "ok",
                "Details": [
                    {
                        "Status": "passed",
                        "Name": "reachability"
                    }
                ]
            },
            "InstanceStatus": {
                "Status": "ok",
                "Details": [
                    {
                        "Status": "passed",
                        "Name": "reachability"
                    }
                ]
            }
        }
    ]
}
If I just run by hardcoding the values
sh 'aws cloudformation describe-stack-resource --logical-resource-id someresource --stack-name somestack-QA'
sh 'aws ec2 describe-instance-status --instance-ids i-123456789'
They return the JSON fine.

Что я делаю не так?

...