jenkinsci / cloudevents-plugin

Cloudevents Plugin for Jenkins
https://plugins.jenkins.io/cloudevents/
MIT License
18 stars 15 forks source link

No body available for Build events #21

Open msamad opened 1 year ago

msamad commented 1 year ago

Jenkins and plugins versions report

The plugin sends the event to http sink but the body is empty and following error is thrown in Jenkins

enkins  | 2023-05-30 03:23:06.949+0000 [id=245]        INFO    i.j.p.cloudevents.sinks.HTTPSink#sendCloudEvent: Received response: 404
jenkins  | com.fasterxml.jackson.databind.JsonMappingException: Cannot invoke "java.util.Date.getTime()" because "this.createdDate" is null (through reference chain: io.jenkins.plugins.cloudevents.model.JobModel["createdDate"])
jenkins  |      at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:390)
jenkins  |      at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:349)
jenkins  |      at com.fasterxml.jackson.databind.ser.std.StdSerializer.wrapAndThrow(StdSerializer.java:316)
jenkins  |      at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:778)
jenkins  |      at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:178)
jenkins  |      at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider._serialize(DefaultSerializerProvider.java:480)
jenkins  |      at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:319)
jenkins  |      at com.fasterxml.jackson.databind.ObjectMapper._writeValueAndClose(ObjectMapper.java:4485)
jenkins  |      at com.fasterxml.jackson.databind.ObjectMapper.writeValueAsString(ObjectMapper.java:3740)
jenkins  |      at io.jenkins.plugins.cloudevents.CloudEventsUtil.convertToJson(CloudEventsUtil.java:16)
jenkins  |      at io.jenkins.plugins.cloudevents.sinks.HTTPSink.buildCloudEvent(HTTPSink.java:38)
jenkins  |      at io.jenkins.plugins.cloudevents.sinks.HTTPSink.sendCloudEvent(HTTPSink.java:57)
jenkins  |      at io.jenkins.plugins.cloudevents.Stage.handleEvent(Stage.java:38)
jenkins  |      at io.jenkins.plugins.cloudevents.listeners.CEJobListener.onFinalized(CEJobListener.java:30)
jenkins  |      at hudson.model.listeners.RunListener.lambda$fireFinalized$3(RunListener.java:244)
jenkins  |      at jenkins.util.Listeners.lambda$notify$0(Listeners.java:59)
jenkins  |      at jenkins.util.Listeners.notify(Listeners.java:67)
jenkins  |      at hudson.model.listeners.RunListener.fireFinalized(RunListener.java:242)
jenkins  |      at hudson.model.Run.onEndBuilding(Run.java:2062)
jenkins  |      at org.jenkinsci.plugins.workflow.job.WorkflowRun.finish(WorkflowRun.java:663)
jenkins  |      at org.jenkinsci.plugins.workflow.job.WorkflowRun$GraphL.onNewHead(WorkflowRun.java:1065)
jenkins  |      at org.jenkinsci.plugins.workflow.cps.CpsFlowExecution.notifyListeners(CpsFlowExecution.java:1587)
jenkins  |      at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$3.run(CpsThreadGroup.java:509)
jenkins  |      at org.jenkinsci.plugins.workflow.cps.CpsVmExecutorService$1.run(CpsVmExecutorService.java:38)
jenkins  |      at hudson.remoting.SingleLaneExecutorService$1.run(SingleLaneExecutorService.java:139)
jenkins  |      at jenkins.util.ContextResettingExecutorService$1.run(ContextResettingExecutorService.java:28)
jenkins  |      at jenkins.security.ImpersonatingExecutorService$1.run(ImpersonatingExecutorService.java:68)
jenkins  |      at jenkins.util.ErrorLoggingExecutorService.lambda$wrap$0(ErrorLoggingExecutorService.java:51)
jenkins  |      at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
jenkins  |      at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
jenkins  |      at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
jenkins  |      at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
jenkins  |      at java.base/java.lang.Thread.run(Thread.java:833)
jenkins  | Caused by: java.lang.NullPointerException: Cannot invoke "java.util.Date.getTime()" because "this.createdDate" is null
jenkins  |      at io.jenkins.plugins.cloudevents.model.JobModel.getCreatedDate(JobModel.java:90)
jenkins  |      at jdk.internal.reflect.GeneratedMethodAccessor417.invoke(Unknown Source)
jenkins  |      at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
jenkins  |      at java.base/java.lang.reflect.Method.invoke(Method.java:568)
jenkins  |      at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:689)
jenkins  |      at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:770)
jenkins  |      ... 29 more
Environment ```text Jenkins: 2.387.3 OS: Linux - 5.4.0-1103-azure Java: 17.0.7 - Eclipse Adoptium (OpenJDK 64-Bit Server VM) ``` Plugin: ```text cloudevents:1.0.0 ```

What Operating System are you using (both controller, and any agents involved in the problem)?

NA

Reproduction steps

  1. In global config, set up an http sink in CloudEvents plugin
  2. Enable Job Started, Job Completed, Job Finalized
  3. Create a freestyle project and run the pipeline
  4. Check the http sink endpoint, it would have received request without body

Expected Results

HttpSink to receive request with body object similar to below, as mentioned in https://github.com/jenkinsci/cloudevents-plugin#build-events

{
   "userId": "SYSTEM",
   "userName": "SYSTEM",
   "name": "test2",
   "displayName": "test2",
   "url": "job/test2/",
   "build": {
       "fullUrl": "http://3.101.116.80/job/test2/13/",
       "number": 13,
       "queueId": 25,
       "timestamp": 1626611053632,
       "duration": 0,
       "phase": "STARTED",
       "status": null,
       "url": "job/test2/13/",
       "displayName": null,
       "parameters": {
           "IsSCM": "true"
       },
       "scmState": {
           "url": "https://github.com/ShrutiC-git/scmConfig.git",
           "branch": "origin/main",
           "commit": "218c63f230732c6d561fefd00fd0d2ac4ded1a0c"
       }
   }
}

Actual Results

HttpSink to receive request without body object

Anything else?

No response