在执行Jenkins Pipeline时遇到异常:Caused: java.io.NotSerializableException: groovy.json.internal.LazyMap。

4

我正在尝试创建Jenkins流水线,该流水线在不同阶段对我的第三方流水线进行HTTP调用,并根据响应继续进行下一步操作。以下是我的Jenkinsfile:

 /* 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)

                    
                }
            }
        }
    }
}

现在,在“创建并触发构建”阶段中,我遇到了以下异常:

   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。我甚至尝试使用Shell curl命令,仍然遇到同样的问题。我还参考了Jenkins Pipeline NotSerializableException: groovy.json.internal.LazyMap,但我不知道我具体错在哪里。

以下是我的Jenkins工作的控制台输出:

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

链接问题中的被接受答案对你有解决方案。在某些情况下,def response = httpRequest 包含不可序列化的对象。你需要从该对象中取出所需的一切并重置该对象(例如 response = null)后继续。 - MaratC
我做了这个并尝试了一下: def response = httpRequest contentType: 'APPLICATION_JSON', httpMode: 'POST', url: url , customHeaders: header, requestBody: requestBodyJSON //def response = sh(script: 'curl -X POST ${url} -H "accept: application/json" -H "Content-Type: application/json" -d ${requestBodyJSON}')def status = response.getStatus() response = null return status , 仍然得到相同的异常 - KCS
我也尝试了在函数中只使用 sh(script: 'curl -X POST ${url} -H "accept: application/json" -H "Content-Type: application/json" -d ${requestBodyJSON}'),但仍然遇到相同的问题。 - KCS
在函数返回之前,尝试将所有对象设置为 null。如果这样做没有帮助,请在阶段中执行相同的操作。 - MaratC
我所做的是,在stage中定义了def response = sh(script:'curl -X POST $ {url} -H“accept:application / json”-H“Content-Type:application / json”-d $ {requestBodyJSON}')。 在不调用函数的情况下,将response设置为null。仍然遇到相同的问题。是否有其他替代方法可以进行HTTP POST调用,以避免出现此问题? - KCS
1个回答

3

使用JsonSlurperClassic替代JsonSlurper


JsonSlurperClassic生成一个标准的可序列化的Java HashMap

JsonSlurper生成的是不可序列化的LazyMap


我在进行HTTP调用后立即遇到异常。无法捕获响应。在上述方法中,我遇到异常的地方没有使用任何JsonSlurper。 - KCS
你的意思是你没有使用它吗?你的代码中有 def parser = new JsonSlurper(),并且与JsonSlurper相关的异常 NotSerializableException: groovy.json.internal.LazyMap - daggett
我的意思是说,只有在调用stage('Proceed_With_Create_And_Trigger_Build')中的createAndTriggerBuild方法时,才会出现异常,否则它运行正常。 - KCS
问题在于,管道命令序列有可能在不同的Jenkins节点上执行。为了实现这一点,管道尝试对所有当前变量进行序列化并将它们传输到另一个节点(甚至可以是同一个节点)。像echo/println这样的命令会强制管道执行此操作... - daggett
JsonSlurperClassic 更好,因为它使用标准的 HashMap,并且解决了与 @KCS 相同的异常。这个让我忙碌了一整天。 - QkiZ
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接