为什么我的 pipilne 脚本中的 curl 命令结果 returns 缺少值
Why a result of curl command in my pipilne script returns a missing value
我正在使用 CA Service Virtualization,它允许使用特定 POST 请求从 Swagger 文件创建虚拟服务。我正在尝试从 jenkins 管道执行类似的 post 请求,但是当我 运行 我的构建时,我收到一条错误消息,指出缺少值。
有效的 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 管道中工作,我已经奋斗了很长时间。
我有很多问题
"
个字符。经过多次尝试,我的构建现在似乎是成功的,但缺少值并且未创建虚拟服务。我感到很绝望,我不知道如何解决它。 (下面我使用 GitHub 一个而不是本地 Swagger 文件):
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\""""
}
}
}
}
jenkins 的输出是:
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
似乎不接受空 "status" 值。
您需要删除此密钥。
对于双引号问题,尝试与简单引号混合使用,这样可以缓解问题。
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"'
}
}
}
}
无论如何,对于您的错误,状态字段的空值似乎是不允许的。
我正在使用 CA Service Virtualization,它允许使用特定 POST 请求从 Swagger 文件创建虚拟服务。我正在尝试从 jenkins 管道执行类似的 post 请求,但是当我 运行 我的构建时,我收到一条错误消息,指出缺少值。
有效的 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 管道中工作,我已经奋斗了很长时间。
我有很多问题 "
个字符。经过多次尝试,我的构建现在似乎是成功的,但缺少值并且未创建虚拟服务。我感到很绝望,我不知道如何解决它。 (下面我使用 GitHub 一个而不是本地 Swagger 文件):
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\""""
}
}
}
}
jenkins 的输出是:
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
似乎不接受空 "status" 值。
您需要删除此密钥。
对于双引号问题,尝试与简单引号混合使用,这样可以缓解问题。
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"'
}
}
}
}
无论如何,对于您的错误,状态字段的空值似乎是不允许的。