tekton-pipelinesopenshift-pipelines

How to use single eventlistener for multiple tekton pipelines?


I'd like to have single eventlistener that would trigger different pipelines based on the git repo name.


Solution

  • For the api v1alpha1 it can be done like this:

    apiVersion: triggers.tekton.dev/v1alpha1
    kind: EventListener
    metadata:
      name: event-listener-yf57o5
    spec:
      serviceAccountName: pipeline
      triggers:
        - name: app1Trigger
          bindings:
            - kind: ClusterTriggerBinding
              ref: github-push
          interceptors:
            - params:
                - name: filter
                  value: body.repository.name.matches('app1name-')
              ref:
                kind: ClusterInterceptor
                name: cel
          template:
            ref: trigger-template-app1-hh2im8
        - name: app2trigger
          bindings:
            - kind: ClusterTriggerBinding
              ref: github-push
          interceptors:
            - params:
                - name: filter
                  value: body.repository.name.matches('app2name-')
              ref:
                kind: ClusterInterceptor
                name: cel
          template:
            ref: trigger-template-app2-5yoj99
    

    Where the trigger-template can be like this (for completes):

    apiVersion: triggers.tekton.dev/v1alpha1
    kind: TriggerTemplate
    metadata:
      name: trigger-template-app2-5yoj99
    spec:
      params:
        - name: git-revision
        - name: git-commit-message
        - name: git-repo-url
        - name: git-repo-name
        - name: content-type
        - name: pusher-name
      resourcetemplates:
        - apiVersion: tekton.dev/v1beta1
          kind: PipelineRun
          metadata:
            generateName: app2-pipeline-
            labels:
              tekton.dev/pipeline: app2-pipeline
          spec:
            params:
              - name: APP_NAME
                value: app2
              - name: GIT_REPO
                value: $(tt.params.git-repo-url)
              - name: GIT_REVISION
                value: $(tt.params.git-revision)
            pipelineRef:
              name: app2-pipeline
            workspaces:
              - name: workspace
                volumeClaimTemplate:
                  metadata:
                    labels:
                      tekton.dev/pipeline: app2-pipeline
                  spec:
                    accessModes:
                      - ReadWriteOnce
                    resources:
                      requests:
                        storage: 1Gi