У меня есть скриптовый сценарий 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.
Что я делаю не так?