Skip to content

lambda invoked successfully but fails jenkins build with JSON errorΒ #94

@d-rep

Description

@d-rep

After a successful lambda deploy + invoke, I was seeing a jenkins job fail with the following error.

Also:   hudson.remoting.ProxyException: net.sf.json.JSONException: Invalid JSON String
hudson.remoting.ProxyException: net.sf.json.JSONException: Invalid JSON String
	at net.sf.json.JSONSerializer.toJSON(JSONSerializer.java:143)
	at net.sf.json.JSONSerializer.toJSON(JSONSerializer.java:103)
	at net.sf.json.JSONSerializer.toJSON(JSONSerializer.java:84)
	at de.taimos.pipeline.aws.utils.JsonUtils.fromString(JsonUtils.java:33)
	at de.taimos.pipeline.aws.InvokeLambdaStep$Execution.run(InvokeLambdaStep.java:153)
	at org.jenkinsci.plugins.workflow.steps.SynchronousNonBlockingStepExecution$1$1.call(SynchronousNonBlockingStepExecution.java:50)
	at hudson.security.ACL.impersonate(ACL.java:290)
	at org.jenkinsci.plugins.workflow.steps.SynchronousNonBlockingStepExecution$1.run(SynchronousNonBlockingStepExecution.java:47)
	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

My configuration is like this:

withAWS(credentials:'jenkins') {
  awsIdentity()
  invokeLambda([
    awsRegion: region,
    awsAccessKeyId: env.AWS_ACCESS_KEY_ID,
    awsSecretKey: env.AWS_SECRET_ACCESS_KEY,
    functionName: lambda.name,
    payload: '{}',
    synchronous: false, // Shouldn't this ignore the response?
  ])
}

The lambda being invoked was python where the last line was return 'Finished'. The fix was to change that to simply return without a string.

I think I am getting "Invalid JSON String" when the response was'Finished' because string literals can't be parsed, but AWS allows it as a valid return. Should this fail the whole job?

It would also be friendlier if the error from invokeLambda mentioned that the response was the culprit. I mistakenly thought it was the input payload or jsonParameters that were the problem.

In addition, why does response even matter when I have synchronous: false ?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions