Не удается запустить команду AWS CLI в скрипте Jenkins

#jenkins #sh #aws-cli #jmespath

#дженкинс #sh #aws-cli #jmespath

Вопрос:

Я запускаю команду AWS и пытаюсь перехватить команду

 weight = sh (
            script: """
            aws route53 list-resource-record-sets 
            --hosted-zone-id ${HOSTED_ZONE_ID} 
            --query "ResourceRecordSets[?Type == 'A' amp;amp; Name == ${RECORD_NAME} amp;amp; SetIdentifier == ${IDENTIFIER}].Weight"
            """,
            returnStdout: true
        )
  

но я продолжаю получать ошибку:

 aws route53 list-resource-record-sets --hosted-zone-id ABCABCABCABC --query 'ResourceRecordSets[?Type == '''A''' amp;amp; Name == test-e1-qa.aws.com. amp;amp; SetIdentifier == test-qa-e1].Weight'
Bad value for --query ResourceRecordSets[?Type: Invalid jmespath expression: Incomplete expression:
"ResourceRecordSets[?Type"
  

Но если я выполняю команду в терминале, она работает нормально:

 aws route53 list-resource-record-sets --hosted-zone-id ABCABCABCABC --query "ResourceRecordSets[?Type == 'A' amp;amp; Name == 'test-e1-qa.aws.com.' amp;amp; SetIdentifier == 'test-qa-e1'].Weight"
  

Похоже, что-то не так с тем, как он обрабатывает кавычки, но я не уверен, как это исправить. Я попытался использовать замену двойных кавычек ResourceRecordSets на """ или /x22 , но это все равно выдает ошибку.

Ответ №1:

Похоже, проблема с кавычками, вы можете попробовать ниже конвейера.

 pipeline {
    agent none
    stages {
        stage ('getweight') {
            agent any

            steps {
                sh '''#!/bin/bash
                HOSTED_ZONE_ID=12345abcd
                RECORD_NAME="'test.example.com.'"
                aws route53 list-resource-record-sets --hosted-zone-id ${HOSTED_ZONE_ID} --query "ResourceRecordSets[?Type == 'A' amp;amp; Name == ${RECORD_NAME} amp;amp; SetIdentifier == 'test'].Weight"
                '''
            }
        }
    }
}
  

вывод:

 [Pipeline] stage
[Pipeline] { (getweight)
[Pipeline] node
Running on Jenkins in test
[Pipeline] {
[Pipeline] sh
[testpipline] Running shell script
[
    200
]
[Pipeline] }
[Pipeline] // node
[Pipeline] }
[Pipeline] // stage
[Pipeline] End of Pipeline
Finished: SUCCESS