tektoncd / triggers

Event triggering with Tekton!
Apache License 2.0
552 stars 416 forks source link

CEL overlay from headers error: couldn't unmarshal json from the TriggerTemplate: invalid character "X" after object key:value pair #1621

Closed Timoses closed 1 year ago

Timoses commented 1 year ago

Expected Behavior

The trigger should create the Pipeline.

Actual Behavior

Error:

# push event
[tekton-triggers-core-interceptors-7948fbb949-rmkpl] {"level":"info","ts":1690891975.432717,"caller":"server/server.go:154","msg":"Interceptor response is: &{Extensions:map[event:[push]] Continue:true Status:{Code:OK Message:}}"}
[el-eventlistener-cbc7dcb5b-ckqsn] {"severity":"info","timestamp":"2023-08-01T12:12:55.436Z","logger":"eventlistener","caller":"sink/sink.go:442","message":"ResolvedParams : [{Name:repo_clone_http Value:http://git.example.com/test/test.git} {Name:repo_clone_ssh Value:git@git.example.com:test/test.git} {Name:event Value:[\"push\"]}]","commit":"2ec8bc6-dirty","eventlistener":"eventlistener","namespace":"tekton-pipelines","/triggers-eventid":"253e411c-7521-4b29-af33-27715022e5c9","eventlistenerUID":"df84f1dc-5d5b-4320-9f60-add1d2cbe152","/triggers-eventid":"253e411c-7521-4b29-af33-27715022e5c9","/trigger":"trigger-gitea"}
[el-eventlistener-cbc7dcb5b-ckqsn] {"severity":"error","timestamp":"2023-08-01T12:12:55.436Z","logger":"eventlistener","caller":"sink/sink.go:606","message":"problem creating obj: &errors.errorString{s:\"couldn't unmarshal json from the TriggerTemplate: invalid character 'p' after object key:value pair\"}","commit":"2ec8bc6-dirty","eventlistener":"eventlistener","namespace":"tekton-pipelines","/triggers-eventid":"253e411c-7521-4b29-af33-27715022e5c9","eventlistenerUID":"df84f1dc-5d5b-4320-9f60-add1d2cbe152","/triggers-eventid":"253e411c-7521-4b29-af33-27715022e5c9","/trigger":"trigger-gitea"}
[el-eventlistener-cbc7dcb5b-ckqsn] {"severity":"error","timestamp":"2023-08-01T12:12:55.436Z","logger":"eventlistener","caller":"sink/sink.go:446","message":"couldn't unmarshal json from the TriggerTemplate: invalid character 'p' after object key:value pair","commit":"2ec8bc6-dirty","eventlistener":"eventlistener","namespace":"tekton-pipelines","/triggers-eventid":"253e411c-7521-4b29-af33-27715022e5c9","eventlistenerUID":"df84f1dc-5d5b-4320-9f60-add1d2cbe152","/triggers-eventid":"253e411c-7521-4b29-af33-27715022e5c9","/trigger":"trigger-gitea"}

# comment event
[tekton-triggers-core-interceptors-7948fbb949-rmkpl] {"level":"info","ts":1690892015.8486938,"caller":"server/server.go:154","msg":"Interceptor response is: &{Extensions:map[event:[issue_comment]] Continue:true Status:{Code:OK Message:}}"}
[el-eventlistener-cbc7dcb5b-ckqsn] {"severity":"info","timestamp":"2023-08-01T12:13:35.851Z","logger":"eventlistener","caller":"sink/sink.go:442","message":"ResolvedParams : [{Name:event Value:[\"issue_comment\"]} {Name:repo_clone_http Value:http://git.example.com/test/test.git} {Name:repo_clone_ssh Value:git@git.example.com:test/test.git}]","commit":"2ec8bc6-dirty","eventlistener":"eventlistener","namespace":"tekton-pipelines","/triggers-eventid":"57180ce6-d0ff-4d32-be5d-c29cc04808d7","eventlistenerUID":"df84f1dc-5d5b-4320-9f60-add1d2cbe152","/triggers-eventid":"57180ce6-d0ff-4d32-be5d-c29cc04808d7","/trigger":"trigger-gitea"}
[el-eventlistener-cbc7dcb5b-ckqsn] {"severity":"error","timestamp":"2023-08-01T12:13:35.851Z","logger":"eventlistener","caller":"sink/sink.go:606","message":"problem creating obj: &errors.errorString{s:\"couldn't unmarshal json from the TriggerTemplate: invalid character 'i' after object key:value pair\"}","commit":"2ec8bc6-dirty","eventlistener":"eventlistener","namespace":"tekton-pipelines","/triggers-eventid":"57180ce6-d0ff-4d32-be5d-c29cc04808d7","eventlistenerUID":"df84f1dc-5d5b-4320-9f60-add1d2cbe152","/triggers-eventid":"57180ce6-d0ff-4d32-be5d-c29cc04808d7","/trigger":"trigger-gitea"}
[el-eventlistener-cbc7dcb5b-ckqsn] {"severity":"error","timestamp":"2023-08-01T12:13:35.851Z","logger":"eventlistener","caller":"sink/sink.go:446","message":"couldn't unmarshal json from the TriggerTemplate: invalid character 'i' after object key:value pair","commit":"2ec8bc6-dirty","eventlistener":"eventlistener","namespace":"tekton-pipelines","/triggers-eventid":"57180ce6-d0ff-4d32-be5d-c29cc04808d7","eventlistenerUID":"df84f1dc-5d5b-4320-9f60-add1d2cbe152","/triggers-eventid":"57180ce6-d0ff-4d32-be5d-c29cc04808d7","/trigger":"trigger-gitea"}

Steps to Reproduce the Problem

  1. Create Eventlistener
  2. Create Trigger
  3. Fire event

Additional Info

Client version: 0.31.1 Pipeline version: v0.50.0 Triggers version: v0.24.1

This is quite odd. I am trying to create a parameter via CEL interceptor from the Request Header. The error above seems to indicate that the first letter of that parameter is being interpreted ('i' for an issue event, 'p' for a push event) and then fails.

Something similar has been reported here: https://github.com/tektoncd/triggers/issues/1392

apiVersion: triggers.tekton.dev/v1beta1
kind: EventListener
metadata:
  name: eventlistener
  namespace: tekton-pipelines
spec:
  namespaceSelector:
    matchNames:
    - pipes
  serviceAccountName: eventlistener
---
apiVersion: triggers.tekton.dev/v1beta1
kind: Trigger
metadata:
  name: trigger
  namespace: pipes
spec:
  bindings:
  - kind: TriggerBinding
    ref: triggerbinding
  interceptors:
  - params:
    - name: overlays
      value:
      - expression: header['X-Gitea-Event']
        key: event
    ref:
      kind: ClusterInterceptor
      name: cel
  template:
    spec:
      params:
      - name: repo_clone_ssh
      - name: repo_clone_http
      - name: event
      resourcetemplates:
      - apiVersion: tekton.dev/v1beta1
        kind: PipelineRun
        metadata:
          generateName: pipes
        spec:
          params:
          - name: event
            value: $(tt.params.event)
          - name: repo_clone_http
            value: $(tt.params.repo_clone_http)
          - name: repo_clone_ssh
            value: $(tt.params.repo_clone_ssh)
          pipelineRef:
            name: pipes
          workspaces:
          - name: data
            volumeClaimTemplate:
              spec:
                accessModes:
                - ReadWriteOnce
                resources:
                  requests:
                    storage: 1Gi
---
apiVersion: triggers.tekton.dev/v1beta1
kind: TriggerBinding
metadata:
  name: triggerbinding-gitea
  namespace: pipes
spec:
  params:
  - name: repo_clone_http
    value: $(body.repository.clone_url)
  - name: repo_clone_ssh
    value: $(body.repository.ssh_url)
  - name: event
    value: $(extensions.event)

Let me know if you need more info.

Timoses commented 1 year ago

The initial log line gave a hint:

[tekton-triggers-core-interceptors-7948fbb949-rmkpl] {"level":"info","ts":1690891975.432717,"caller":"server/server.go:154","msg":"Interceptor response is: &{Extensions:map[event:[push]] Continue:true Status:{Code:OK Message:}}"}

It states:

&{Extensions:map[event:[push]] 

Using the following solves the issue:

  interceptors:
  - params:
    - name: overlays
      value:
      - expression: header['X-Gitea-Event'][0]
        key: event
    ref:
      kind: ClusterInterceptor
      name: cel

(Note accessing the first array item of the header field)

Timoses commented 1 year ago

Documented here: https://tekton.dev/docs/triggers/cel_expressions/#list-of-extensions