- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试创建 Jenkins 管道,它在不同阶段对我的第三方管道进行 http 调用,并根据响应进入下一阶段。下面是我的 Jenkins 文件
/* groovylint-disable CompileStatic, DuplicateListLiteral, DuplicateMapLiteral, DuplicateNumberLiteral, DuplicateStringLiteral, LineLength, MethodParameterTypeRequired, MethodReturnTypeRequired, NestedBlockDepth, NoDef, SpaceAroundMapEntryColon, UnnecessaryGetter, VariableTypeRequired */
import groovy.json.JsonSlurper
import groovy.json.*
def controlSessionId
def pullRequestId
def deployId
def header = [[name:'authorization', value:'token 653782812637euik1kesmsajmdiou237ue728787']]
def getPullRequests() {
def header = [[name:'authorization', value:'token 653782812637euik1kesmsajmdiou237ue728787']]
def response = httpRequest consoleLogResponseBody: false,
contentType: 'APPLICATION_JSON',
httpMode: 'GET',
url: 'https://thirdpartypipeline.ethos.corp.mycompany.com/v1/myproduct/myservice/pulls' ,
customHeaders: header
/* println('Status: ' + response.status)
println('Content: ' + response.content) */
return response
}
def joinBuildQueue() {
def header = [[name:'authorization', value:'token 653782812637euik1kesmsajmdiou237ue728787']]
def response = httpRequest consoleLogResponseBody: false,
contentType: 'APPLICATION_JSON',
httpMode: 'POST',
url: 'https://thirdpartypipeline.ethos.corp.mycompany.com/v2/myproduct/myservice/queue' ,
customHeaders: header
return response
}
def initDeploy(def controlSessionId, def pullRequestId) {
def header = [[name:'authorization', value:'token 653782812637euik1kesmsajmdiou237ue728787']]
def requestBody = "{\"control_session_id\":${controlSessionId},\"pull_requests\":[${pullRequestId}],\"autoplay\":\"true\"}"
def response = httpRequest consoleLogResponseBody: true,
contentType: 'APPLICATION_JSON',
httpMode: 'POST',
url: 'https://thirdpartypipeline.ethos.corp.mycompany.com/v2/myproduct/myservice/deploys' ,
customHeaders: header,
requestBody: requestBody
return response
}
def getDeployStatus(def deployId) {
def header = [[name:'authorization', value:'token 653782812637euik1kesmsajmdiou237ue728787']]
def response = httpRequest consoleLogResponseBody: false,
contentType: 'APPLICATION_JSON',
httpMode: 'GET',
url: "https://thirdpartypipeline.ethos.corp.mycompany.com/v2/myproduct/myservice/deploys/${deployId}" ,
customHeaders: header
return response
}
def createAndTriggerBuild(def deployId, def environmentId, def stageId, def projectId) {
def header = [[name:'authorization', value:'token 653782812637euik1kesmsajmdiou237ue728787']]
def requestBodyJSON = "{\"environment_id\":${environmentId},\"stage_id\":${stageId},\"projects\":[{\"id\":${projectId}}]}"
def url = "https://thirdpartypipeline.ethos.corp.mycompany.com/v2/myproduct/myservice/deploys/${deployId}/builds"
println("Request Body JSON is " + requestBodyJSON)
def response = httpRequest consoleLogResponseBody: false,
contentType: 'APPLICATION_JSON',
httpMode: 'POST',
url: "https://thirdpartypipeline.ethos.corp.mycompany.com/v2/myproduct/myservice/deploys/${deployId}/builds" ,
customHeaders: header,
requestBody: requestBodyJSON
// def response = sh(returnStdout: true, script: 'curl -X POST ${url} -H "accept: application/json" -H "Content-Type: application/json" -d ${requestBodyJSON}')
println('Status is ' + response)
return response
}
def getPipeLineEnvironmentDetails(def environments, def stateName) {
def environmentDetails = [:]
environments.each { environment ->
if (stateName.equals(environment.name)) {
environmentDetails.environmentId = environment.id
environmentDetails.environmentName = environment.name
environmentDetails.stageId = environment.steps[0].id
environmentDetails.projectId = environment.steps[0].projects[0].id
environmentDetails.status = environment.status
}
}
return environmentDetails
}
def getParsedResponseObject(def response) {
def parser = new JsonSlurper()
return parser.parseText(response.getContent())
}
pipeline {
agent any
stages {
stage('Automate_Moonbeam_Deployment') {
steps {
script {
//fetching the PR from thirdpartypipeline
println('Fetch the valid PR to deploy')
def response = getPullRequests()
def parser = new JsonSlurper()
def pullRequestObject = parser.parseText(response.content)
println('pull requestObject = ' + pullRequestObject)
pullRequestId = pullRequestObject[0].id
if (response.status == 200) {
println('PR with id ' + pullRequestId + ' exist, can proceed for deployment')
}
}
}
}
stage('Proceed_With_Joining_Queue') {
steps {
script {
println('PR Id received from previous step: ' + pullRequestId)
def response = joinBuildQueue()
def parser = new JsonSlurper()
def requestObject = parser.parseText(response.content)
controlSessionId = requestObject.control_session.id
if (response.status == 200) {
println('Control Session Id is ' + controlSessionId + ' can proceed with deploy')
}
}
}
}
stage('Proceed_With_Deploy') {
steps {
script {
println('Control Session Id received from previous step: ' + controlSessionId)
def response = initDeploy(controlSessionId, pullRequestId)
def parser = new JsonSlurper()
def responseObject = parser.parseText(response.getContent())
deployId = responseObject.id
println ('DeployId is ' + deployId)
println ('Deploy Status is is ' + responseObject.status)
println('environmentId is ' + responseObject.environments[0].id)
}
}
}
stage('Get_Deploy_Status') {
steps {
script {
def deployStatusResponse = getDeployStatus(deployId)
println('Deploy Status is ' + deployStatusResponse.getContent())
}
}
}
stage('Proceed_With_Create_And_Trigger_Build') {
steps {
script {
def deployStatusResponse = getParsedResponseObject(getDeployStatus(deployId))
def environmentDetailMap = getPipeLineEnvironmentDetails(deployStatusResponse.environments, 'Build')
println('DeploymentId is ' + deployId + ' :: Environment Id is ' + environmentDetailMap.environmentId + ' :: Environment Name is ' + environmentDetailMap.environmentName
+ ' :: Project Id is ' + environmentDetailMap.projectId + ' :: StageId is ' + environmentDetailMap.stageId)
def response = createAndTriggerBuild(deployId, environmentDetailMap.environmentId, environmentDetailMap.stageId, environmentDetailMap.projectId)
}
}
}
}
}
现在,在创建和触发构建的 Proceed_With_Create_And_Trigger_Build 阶段,我遇到以下异常:
an exception which occurred:
in field com.cloudbees.groovy.cps.impl.BlockScopeEnv.locals
in object com.cloudbees.groovy.cps.impl.BlockScopeEnv@3035b5d8
in field com.cloudbees.groovy.cps.impl.CallEnv.caller
44
Caused: java.io.NotSerializableException: groovy.json.internal.LazyMap
at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:926)
at org.jboss.marshalling.river.BlockMarshaller.doWriteObject(BlockMarshaller.java:65)
a
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Finished: FAILURE
注意 createAndTriggerBuild 方法正在发起 Http POST 调用,成功后返回状态码 204。
Started by user myldap@mycompany.com
Running in Durability level: MAX_SURVIVABILITY
[Pipeline] Start of Pipeline
[Pipeline] node
Running on Jenkins in /apps/jenkins/latest/workspace/Moonbeam Deploy Test
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Automate_Moonbeam_Deployment)
[Pipeline] script
[Pipeline] {
[Pipeline] echo
Fetch the valid PR to deploy
[Pipeline] httpRequest
HttpMethod: GET
URL: https://thirdpartyPipeline.solution.corp.mycompany.com/v1/csmt-fault-testing/fault-tolerance-demo/pulls
Content-Type: application/json
authorization: *****
Sending request to url: https://thirdpartyPipeline.solution.corp.mycompany.com/v1/csmt-fault-testing/fault-tolerance-demo/pulls
Response Code: HTTP/1.1 200 OK
Success code from [100‥399]
[Pipeline] echo
pull requestObject = [[id:425010, github_id:2115456, number:6, title:Test Deploy: Update README.md, branch_name:master, base_branch_name:master, sha:b06278fdce1a21b2a9cbb85787fc9277096aad92, remote:git@git.corp.mycompany.com:myldap/fault-tolerance-demo.git, created_at:2020-07-30T15:39:23.530Z, updated_at:2020-07-31T05:07:31.074Z, closed:false, sent_at:2020-07-30T15:44:44.000Z, approved_at:2020-07-31T05:07:31.071Z, forced_approver_id:null, repository_id:167771, mergeable:true, acl_comment:null, status:success, latest_statuses:[[status:[id:2557436, pull_request_id:425010, sha:b06278fdce1a21b2a9cbb85787fc9277096aad92, state:success, created_at:2020-07-30T15:44:46.804Z, updated_at:2020-07-30T15:50:59.938Z, sent_at:2020-07-30T15:50:59.000Z, deleted_at:null, context:thirdpartyPipeline-ci/make-ci]]], user:[id:844, username:myldap, email:myldap@mycompany.com, name:Krishna Chandra Soni, avatar:https://git.corp.mycompany.com/avatars/u/9849?, admin:null, created_at:2017-04-28T13:55:35.491Z, updated_at:2020-08-02T10:49:47.542Z, slack_username:null, role:standard, github_id:9849, display_name:hjklhi], repository:[id:167771, name:fault-tolerance-demo, owner:csmt-fault-testing, github_id:298251, service_id:167773, created_at:2020-07-20T07:34:18.888Z, updated_at:2020-07-20T07:34:18.888Z, approval_regex:^(approved|:\+1:|LGTM|:thumbsup:|:white_check_mark:|👍)\s*$, deleted_at:null, multi_merge_allowed:true, min_approvers:1, base_branch:master], approved:true, modifies_pipeline_spec_file:false, reviews:[[user:[id:1jkl223, username:nitkjjain, email:nitkjmnk.jain@mycompany.com, name:Nitesh Jain, avatar:https://git.corp.mycompany.com/avatars/u/15441?, admin:null, created_at:2017-08-31T08:43:02.503Z, updated_at:2020-07-30T13:20:47.319Z, slack_username:nitn, role:standard, github_id:15441, display_name:Nitesjkljklh n], approved:true]], pipeline_file_data:[pipeline_files_modified:[], allowed_to_deploy_pipeline_files:true, reonboarding_required:false, service_spec_errors:[other_errors:[]], deployable_by_user:true]]]
[Pipeline] echo
PR with id 425010 exist, can proceed for deployment
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Proceed_With_Joining_Queue)
[Pipeline] script
[Pipeline] {
[Pipeline] echo
PR Id received from previous step: 425010
[Pipeline] httpRequest
HttpMethod: POST
URL: https://thirdpartyPipeline.solution.corp.mycompany.com/v2/csmt-fault-testing/fault-tolerance-demo/queue
Content-Type: application/json
authorization: *****
Sending request to url: https://thirdpartyPipeline.solution.corp.mycompany.com/v2/csmt-fault-testing/fault-tolerance-demo/queue
Response Code: HTTP/1.1 200 OK
Success code from [100‥399]
[Pipeline] echo
Control Session Id is 394359 can proceed with deploy
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Proceed_With_Deploy)
[Pipeline] script
[Pipeline] {
[Pipeline] echo
Control Session Id received from previous step: 394359
[Pipeline] httpRequest
HttpMethod: POST
URL: https://thirdpartyPipeline.solution.corp.mycompany.com/v2/csmt-fault-testing/fault-tolerance-demo/deploys
Content-Type: application/json
authorization: *****
Sending request to url: https://thirdpartyPipeline.solution.corp.mycompany.com/v2/csmt-fault-testing/fault-tolerance-demo/deploys
Response Code: HTTP/1.1 200 OK
Response:
{"id":447244,"status":"CANDIDATE_CREATING","deploy_candidate":{"head_sha":null},"pull_requests":[{"id":425010,"github_id":2115456,"number":6,"title":"Test Deploy: Update README.md","sha":"b06278fdce1a21b2a9cbb85787fc9277096aad92"}],"current_step":{},"next_deployable_steps":[],"environments":[{"id":667925,"name":"Build","optional":false,"production":false,"single_rollback_allowed":false,"status":"UNSTARTED","steps":[{"id":621647,"name":"default","status":"UNSTARTED","projects":[{"id":1114499,"name":"client-csmt-fault-testing-fault-tolerance-demo-solution-codebuild-artifactory-build","required":true,"title":"build-makefile","avg_build_time":2.9439725,"status":"UNSTARTED","promotable":{"end_values_met":false,"job_status_met":false},"builds":[]}]}]},{"id":667924,"name":"Image Scan","optional":false,"production":false,"single_rollback_allowed":false,"status":"UNSTARTED","steps":[{"id":621646,"name":"default","status":"UNSTARTED","projects":[{"id":1114498,"name":"client-csmt-fault-testing-fault-tolerance-demo-solution-codebuild-aqua-scan","required":true,"title":"image-scan","avg_build_time":65.51788289999999,"status":"UNSTARTED","promotable":{"end_values_met":false,"job_status_met":false},"builds":[]}]}]},{"id":667923,"name":"Dev","optional":false,"production":false,"single_rollback_allowed":false,"status":"UNSTARTED","steps":[{"id":621645,"name":"deploy---Dev","status":"UNSTARTED","projects":[{"id":1114497,"name":"client-csmt-fault-testing-fault-tolerance-demo-solution-lambda-k8s-director","required":true,"title":"deploy-Dev-va6-faulttolerancedemo","avg_build_time":187.452228125,"status":"UNSTARTED","promotable":{"end_values_met":false,"job_status_met":false},"builds":[]}]}]}]}
Success code from [100‥399]
[Pipeline] echo
DeployId is 447244
[Pipeline] echo
Deploy Status is is CANDIDATE_CREATING
[Pipeline] echo
environmentId is 667925
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Get_Deploy_Status)
[Pipeline] script
[Pipeline] {
[Pipeline] httpRequest
HttpMethod: GET
URL: https://thirdpartyPipeline.solution.corp.mycompany.com/v2/csmt-fault-testing/fault-tolerance-demo/deploys/447244
Content-Type: application/json
authorization: *****
Sending request to url: https://thirdpartyPipeline.solution.corp.mycompany.com/v2/csmt-fault-testing/fault-tolerance-demo/deploys/447244
Response Code: HTTP/1.1 200 OK
Success code from [100‥399]
[Pipeline] echo
Deploy Status is {"id":447244,"status":"CANDIDATE_CREATING","deploy_candidate":{"head_sha":null},"pull_requests":[{"id":425010,"github_id":2115456,"number":6,"title":"Test Deploy: Update README.md","sha":"b06278fdce1a21b2a9cbb85787fc9277096aad92"}],"current_step":{},"next_deployable_steps":[],"environments":[{"id":667925,"name":"Build","optional":false,"production":false,"single_rollback_allowed":false,"status":"UNSTARTED","steps":[{"id":621647,"name":"default","status":"UNSTARTED","projects":[{"id":1114499,"name":"client-csmt-fault-testing-fault-tolerance-demo-solution-codebuild-artifactory-build","required":true,"title":"build-makefile","avg_build_time":2.9439725,"status":"UNSTARTED","promotable":{"end_values_met":false,"job_status_met":false},"builds":[]}]}]},{"id":667924,"name":"Image Scan","optional":false,"production":false,"single_rollback_allowed":false,"status":"UNSTARTED","steps":[{"id":621646,"name":"default","status":"UNSTARTED","projects":[{"id":1114498,"name":"client-csmt-fault-testing-fault-tolerance-demo-solution-codebuild-aqua-scan","required":true,"title":"image-scan","avg_build_time":65.51788289999999,"status":"UNSTARTED","promotable":{"end_values_met":false,"job_status_met":false},"builds":[]}]}]},{"id":667923,"name":"Dev","optional":false,"production":false,"single_rollback_allowed":false,"status":"UNSTARTED","steps":[{"id":621645,"name":"deploy---Dev","status":"UNSTARTED","projects":[{"id":1114497,"name":"client-csmt-fault-testing-fault-tolerance-demo-solution-lambda-k8s-director","required":true,"title":"deploy-Dev-va6-faulttolerancedemo","avg_build_time":187.452228125,"status":"UNSTARTED","promotable":{"end_values_met":false,"job_status_met":false},"builds":[]}]}]}]}
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Proceed_With_Create_And_Trigger_Build)
[Pipeline] script
[Pipeline] {
[Pipeline] httpRequest
HttpMethod: GET
URL: https://thirdpartyPipeline.solution.corp.mycompany.com/v2/csmt-fault-testing/fault-tolerance-demo/deploys/447244
Content-Type: application/json
authorization: *****
Sending request to url: https://thirdpartyPipeline.solution.corp.mycompany.com/v2/csmt-fault-testing/fault-tolerance-demo/deploys/447244
Response Code: HTTP/1.1 200 OK
Success code from [100‥399]
[Pipeline] echo
DeploymentId is 447244 :: Environment Id is 667925 :: Environment Name is Build :: Project Id is 1114499 :: StageId is 621647
[Pipeline] echo
Request Body JSON is {"environment_id":667925,"stage_id":621647,"projects":[{"id":1114499}]}
[Pipeline] sh
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
an exception which occurred:
in field com.cloudbees.groovy.cps.impl.BlockScopeEnv.locals
in object com.cloudbees.groovy.cps.impl.BlockScopeEnv@3035b5d8
in field com.cloudbees.groovy.cps.impl.CallEnv.caller
in object com.cloudbees.groovy.cps.impl.FunctionCallEnv@55e62a96
in field com.cloudbees.groovy.cps.impl.ProxyEnv.parent
in object com.cloudbees.groovy.cps.impl.BlockScopeEnv@30fbee31
in field com.cloudbees.groovy.cps.impl.ProxyEnv.parent
in object com.cloudbees.groovy.cps.impl.BlockScopeEnv@30d6811e
in field com.cloudbees.groovy.cps.impl.CallEnv.caller
in object com.cloudbees.groovy.cps.impl.FunctionCallEnv@52ca4cf1
in field com.cloudbees.groovy.cps.Continuable.e
in object com.cloudbees.groovy.cps.Continuable@603018fd
in field org.jenkinsci.plugins.workflow.cps.CpsThread.program
in object org.jenkinsci.plugins.workflow.cps.CpsThread@31121814
in field org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.threads
in object org.jenkinsci.plugins.workflow.cps.CpsThreadGroup@3ddf4d44
in object org.jenkinsci.plugins.workflow.cps.CpsThreadGroup@3ddf4d44
Caused: java.io.NotSerializableException: groovy.json.internal.LazyMap
at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:926)
at org.jboss.marshalling.river.BlockMarshaller.doWriteObject(BlockMarshaller.java:65)
at org.jboss.marshalling.river.BlockMarshaller.writeObject(BlockMarshaller.java:56)
at org.jboss.marshalling.MarshallerObjectOutputStream.writeObjectOverride(MarshallerObjectOutputStream.java:50)
at org.jboss.marshalling.river.RiverObjectOutputStream.writeObjectOverride(RiverObjectOutputStream.java:179)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:344)
at java.util.HashMap.internalWriteEntries(HashMap.java:1793)
at java.util.HashMap.writeObject(HashMap.java:1363)
at sun.reflect.GeneratedMethodAccessor550.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.jboss.marshalling.reflect.JDKSpecific$SerMethods.callWriteObject(JDKSpecific.java:156)
at org.jboss.marshalling.reflect.SerializableClass.callWriteObject(SerializableClass.java:191)
at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:1028)
at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:920)
at org.jboss.marshalling.river.RiverMarshaller.doWriteFields(RiverMarshaller.java:1082)
at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:1040)
at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:920)
at org.jboss.marshalling.river.RiverMarshaller.doWriteFields(RiverMarshaller.java:1082)
at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:1040)
at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:1019)
at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:920)
at org.jboss.marshalling.river.RiverMarshaller.doWriteFields(RiverMarshaller.java:1082)
at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:1040)
at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:1019)
at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:920)
at org.jboss.marshalling.river.RiverMarshaller.doWriteFields(RiverMarshaller.java:1082)
at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:1040)
at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:1019)
at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:920)
at org.jboss.marshalling.river.RiverMarshaller.doWriteFields(RiverMarshaller.java:1082)
at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:1040)
at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:1019)
at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:920)
at org.jboss.marshalling.river.RiverMarshaller.doWriteFields(RiverMarshaller.java:1082)
at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:1040)
at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:920)
at org.jboss.marshalling.river.RiverMarshaller.doWriteFields(RiverMarshaller.java:1082)
at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:1040)
at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:920)
at org.jboss.marshalling.river.BlockMarshaller.doWriteObject(BlockMarshaller.java:65)
at org.jboss.marshalling.river.BlockMarshaller.writeObject(BlockMarshaller.java:56)
at org.jboss.marshalling.MarshallerObjectOutputStream.writeObjectOverride(MarshallerObjectOutputStream.java:50)
at org.jboss.marshalling.river.RiverObjectOutputStream.writeObjectOverride(RiverObjectOutputStream.java:179)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:344)
at java.util.concurrent.ConcurrentSkipListMap.writeObject(ConcurrentSkipListMap.java:1437)
at sun.reflect.GeneratedMethodAccessor569.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.jboss.marshalling.reflect.JDKSpecific$SerMethods.callWriteObject(JDKSpecific.java:156)
at org.jboss.marshalling.reflect.SerializableClass.callWriteObject(SerializableClass.java:191)
at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:1028)
at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:920)
at org.jboss.marshalling.river.RiverMarshaller.doWriteFields(RiverMarshaller.java:1082)
at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:1040)
at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:920)
at org.jboss.marshalling.AbstractObjectOutput.writeObject(AbstractObjectOutput.java:58)
at org.jboss.marshalling.AbstractMarshaller.writeObject(AbstractMarshaller.java:111)
at org.jenkinsci.plugins.workflow.support.pickles.serialization.RiverWriter.lambda$writeObject$0(RiverWriter.java:144)
at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.GroovySandbox.runInSandbox(GroovySandbox.java:237)
at org.jenkinsci.plugins.workflow.support.pickles.serialization.RiverWriter.writeObject(RiverWriter.java:143)
at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.saveProgram(CpsThreadGroup.java:552)
at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.saveProgram(CpsThreadGroup.java:529)
at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.saveProgramIfPossible(CpsThreadGroup.java:516)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Finished: FAILURE
最佳答案
使用 JsonSlurperClassic
而不是 JsonSlurper
JsonSlurperClassic
产生一个标准的 java HashMap
那是可序列化的。
当JsonSlurper
生产 LazyMap
不可序列化
关于git - 执行 Jenkins Pipeline : Caused: java. io.NotSerializableException : groovy. json.internal.LazyMap 时出现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63215272/
最近开始学习MongoDB。今天老师教了我们 mongoexport 命令。在练习时,我遇到了一个典型的问题,包括教练在内的其他同学都没有遇到过。我在我的 Windows 10 机器上使用 Mongo
我是 JSON Schema 的新手,读过什么是 JSON Schema 等等。但我不知道如何将 JSON Schema 链接到 JSON 以针对该 JSON Schema 进行验证。谁能解释一下?
在 xml 中,我可以在另一个 xml 文件中包含一个文件并使用它。如果您的软件从 xml 获取配置文件但没有任何方法来分离配置,如 apache/ngnix(nginx.conf - site-av
我有一个 JSON 对象,其中包含一个本身是 JSON 对象的字符串。我如何反序列化它? 我希望能够做类似的事情: #[derive(Deserialize)] struct B { c: S
考虑以下 JSON { "a": "{\"b\": 12, \"c\": \"test\"}" } 我想定义一个泛型读取 Reads[Outer[T]]对于这种序列化的 Json import
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 11 个月前关闭。 Improve
我的旧项目在 MySQL 中有 Standard JSON 格式的数据。 对于我在 JS (Node.js) 和 DynamoDB 中的全新项目,关于 Standard JSON格式: 是否建议将其转
JSON 值字符串、数字、true、false、null 是否是有效的 JSON? 即,是 true 一个有效的 JSON 文档?还是必须是数组/对象? 一些验证器接受这个(例如 http://jso
我有一个 JSON 字符串,其中一个字段是文本字段。这个文本字段可以包含用户在 UI 中输入的文本,如果他们输入的文本是 JSON 文本,也许是为了说明一些编码,我需要对他们的文本进行编码,以便它不会
我正在通过 IBM MQ 调用处理数据,当由 ColdFusion 10 (10,0,11,285437) 序列化时,0 将作为 +0.0 返回,它会导致无效的 JSON并且无法反序列化。 stPol
我正在从三个数组中生成一个散列,然后尝试构建一个 json。我通过 json object has array 成功了。 require 'json' A = [['A1', 'A2', 'A3'],
我从 API 接收 JSON,响应可以是 30 种类型之一。每种类型都有一组唯一的字段,但所有响应都有一个字段 type 说明它是哪种类型。 我的方法是使用serde .我为每种响应类型创建一个结构并
我正在下载一个 JSON 文件,我已将其检查为带有“https://jsonlint.com”的有效 JSON 到文档目录。然后我打开文件并再次检查,结果显示为无效的 JSON。这怎么可能????这是
我正在尝试根据从 API 接收到的数据动态创建一个 JSON 对象。 收到的示例数据:将数据解码到下面给出的 CiItems 结构中 { "class_name": "test", "
我想从字符串转换为对象。 来自 {"key1": "{\n \"key2\": \"value2\",\n \"key3\": {\n \"key4\": \"value4\"\n }\n
目前我正在使用以下代码将嵌套的 json 转换为扁平化的 json: import ( "fmt" "github.com/nytlabs/gojsonexplode" ) func
我有一个使用来自第三方 API 的数据的应用程序。我需要将 json 解码为一个结构,这需要该结构具有“传入”json 字段的 json 标签。传出的 json 字段具有不同的命名约定,因此我需要不同
我想使用 JSON 架构来验证某些值。我有两个对象,称它们为 trackedItems 和 trackedItemGroups。 trackedItemGroups 是组名称和 trackedItem
考虑以下案例类模式, case class Y (a: String, b: String) case class X (dummy: String, b: Y) 字段b是可选的,我的一些数据集没有字
我正在存储 cat ~/path/to/file/blah | 的输出jq tojson 在一个变量中,稍后在带有 JSON 内容的 curl POST 中使用。它运作良好,但它删除了所有换行符。我知
我是一名优秀的程序员,十分优秀!