Почему результат команды curl в моем скрипте pipilne возвращает пропущенное значение - PullRequest
0 голосов
/ 10 июля 2019

Я использую CA Service Virtualization, которая позволяет создать виртуальный сервис из файла Swagger с определенным запросом POST. Я пытаюсь выполнить аналогичный пост-запрос из конвейера jenkins, однако, когда я запускаю сборку, я получаю сообщение об ошибке, что значения отсутствуют.

Рабочая команда curl:

curl -X POST "http://localhost:1505/lisa-virtualize-invoke/api/v3/vses/VSE/services" -H  "accept: application/json" -H  "Content-Type: multipart/form-data" -F "config={"virtualService":{"version":"2","name":"API_Test_22","description":"Invoke API V2","status":""},"transportProtocol":{"typeId":"HTTP","basePath":"/","useGateway":true,"hostHeaderPassThrough":false},"dataProtocol":{"forRequest":true,"typeId":"RESTDPH"}}" -F "deploy=true" -F "inputFile1=@petstore-swagger.json;type=application/json"

Я долго боролся за то, чтобы команда curl работала в конвейере jenkins. У меня было много проблем с

 "

символов. После многих попыток мои сборки теперь кажутся успешными, но значения отсутствуют, и виртуальная служба не создается. Я чувствую себя совершенно безнадежно и понятия не имею, как это решить. (ниже вместо локального файла Swagger я использую GitHub one):

pipeline {
agent { label 'master' }
stages {
    stage('build') {
        steps {
            sh """curl -X POST -H \"authorization: Basic xxx" ""http://10.0.2.2:1505/lisa-virtualize-invoke/api/v3/vses/VSE/services"" -H \"accept: application/json\" -H \"Content-Type: multipart/form-data\" -F ""config={\"virtualService\":{\"version\":\"2\",\"name\":\"API_Test_22\",\"description\":\"Invoke API V2\",\"status\":\"\"},\"transportProtocol\":{\"typeId\":\"HTTP\",\"basePath\":\"/\",\"useGateway\":true,\"hostHeaderPassThrough\":false},\"dataProtocol\":{\"forRequest\":true,\"typeId\":\"RESTDPH\"}}"" -F \"deploy=true\" -F \"fileInput1=https://github.com/marcin-kulik/devttest-test/blob/master/petstore-swagger.json\""""
        }
    }
}

}

вывод от Дженкинса:

Started by user Marcin Kulik
Running in Durability level: MAX_SURVIVABILITY
[Pipeline] Start of Pipeline
[Pipeline] node
Running on Jenkins in /var/lib/jenkins/workspace/test-bash-in-pipeline
[Pipeline] {
[Pipeline] stage
[Pipeline] { (build)
[Pipeline] sh
+ curl -X POST -H authorization: Basic bWt1bGlrOm1qc2tleURCQ0g3MzUlXiY=    http://10.0.2.2:1505/lisa-virtualize-invoke/api/v3/vses/VSE/services -H accept: application/json -H Content-Type: multipart/form-data -F config={virtualService:{version:2,name:API_Test_22,description:Invoke API V2,status:},transportProtocol:{typeId:HTTP,basePath:/,useGateway:true,hostHeaderPassThrough:false},dataProtocol:{forRequest:true,typeId:RESTDPH}} -F deploy=true -F fileInput1=https://github.com/marcin-kulik/devttest-test/blob/master/petstore-swagger.json
% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                             Dload  Upload   Total   Spent    Left  Speed

 0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100   923    0   293  100   630    559   1202 --:--:-- --:--:-- --:--:--  1761
{"error":{"type":"JSONException","message":"Missing value. at character 77 of {virtualService:{version:2,name:API_Test_22,description:Invoke API V2,status:},transportProtocol:{typeId:HTTP,basePath:/,useGateway:true,hostHeaderPassThrough:false},dataProtocol:{forRequest:true,typeId:RESTDPH}}"}}[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS

Ответы [ 2 ]

1 голос
/ 10 июля 2019

Для проблем с двойными кавычками, попробуйте смешивать с простыми кавычками, это может облегчить дело.

pipeline {
    agent { label 'master' }
    stages {
        stage('build') {
            steps {
                sh 'curl -X POST -H "authorization: Basic xxx" "http://0.0.0.0/lisa-virtualize-invoke/api/v3/vses/VSE/services" -H "accept: application/json" -H "Content-Type: multipart/form-data" -F \'config={"virtualService":{"version":"2","name":"API_Test_22","description":"Invoke API V2","status":""},"transportProtocol":{"typeId":"HTTP","basePath":"/","useGateway":true,"hostHeaderPassThrough":false},"dataProtocol":{"forRequest":true,"typeId":"RESTDPH"}}\' -F "deploy=true" -F "fileInput1=https://github.com/marcin-kulik/devttest-test/blob/master/petstore-swagger.json"'
            }
        }
    }
}

В любом случае, для вашей ошибки, похоже, пустое значение для поля состояния не разрешено.

1 голос
/ 10 июля 2019

Похоже, пустое значение "status" не принято.

Вам необходимо удалить этот ключ.

...