来自 github 的 Tekton 触发器流程

Tekton trigger flow from github

我正在学习 Tekton(用于商业),来自 github actions(私人)。

Tekton 文档(或我能找到的任何其他教程)包含有关如何通过 github 推送自动启动管道的说明。基本上他们都遵循以下流程:(我知道 PipelineRun/TaskRun 等)

Eventlistener - Trigger - TriggerTemplate - Pipeline

以上所有步骤基本上都是您需要执行的配置步骤(以及要创建和维护的文件),一个比另一个更容易,但据我所知, 您正在维护的单个存储库。与 github 操作相比,我只需要 1 个文件来描述我需要的一切,这看起来非常复杂(如果不是麻烦的话)。

我是不是漏掉了什么?或者这只是要走的路? 谢谢!

they also need to be taken for every single repo you're maintaining

你错了。

EventListener 接收您的 webhook 的负载。

根据您的 TriggerBinding,您可以将 GitHub 负载中的字段映射到变量,例如您的输入存储库 name/URL、要使用的分支或引用,...

对于 GitHub 推送事件,一种方法是使用 TriggerBinding,如下所示:

apiVersion: triggers.tekton.dev/v1alpha1
kind: TriggerBinding
metadata:
  name: github-push
spec:
  params:
  - name: gitbranch
    value: $(extensions.branch_name) # uses CEL interceptor, see EL below
  - name: gitrevision
    value: $(body.after) # uses body from webhook payload
  - name: gitrepositoryname
    value: $(body.repository.name)
  - name: gitrepositoryurl
    value: $(body.repository.clone_url)

我们可以在 TriggerTemplate 中重复使用这些参数,将它们传递给我们的管道/任务:

apiVersion: triggers.tekton.dev/v1alpha1
kind: TriggerTemplate
metadata:
  name: github-pipelinerun
spec:
  params:
  - name: gitbranch
  - name: gitrevision
  - name: gitrepositoryname
  - name: gitrepositoryurl
  resourcetemplates:
  - apiVersion: tekton.dev/v1beta1
    kind: PipelineRun
    metadata:
      generateName: github-job-
    spec:
      params:
      - name: identifier
        value: "demo-$(tt.params.gitrevision)"
      pipelineRef:
        name: ci-docker-build
      resources:
      - name: app-git
        resourceSpec:
          type: git
          params:
          - name: revision
            value: $(tt.params.gitrevision)
          - name: url
            value: $(tt.params.gitrepositoryurl)
      - name: ci-image
        resourceSpec:
          type: image
          params:
          - name: url
            value: registry.registry.svc.cluster.local:5000/ci/$(tt.params.gitrepositoryname):$(tt.params.gitrevision)
      - name: target-image
        resourceSpec:
          type: image
          params:
          - name: url
            value: registry.registry.svc.cluster.local:5000/ci/$(tt.params.gitrepositoryname):$(tt.params.gitbranch)
      timeout: 2h0m0s

使用以下 EventListener:

apiVersion: triggers.tekton.dev/v1alpha1
kind: EventListener
metadata:
  name: github-listener
spec:
  triggers:
  - name: github-push-listener
    interceptors:
    - name: GitHub push payload check
      github:
        secretRef:
          secretName: github-secret # a Secret you would create (option)
          secretKey: secretToken    # the secretToken in my Secret matches to secret configured in GitHub, for my webhook
        eventTypes:
        - push
    - name: CEL extracts branch name
      ref:
        name: cel
      params:
      - name: overlays
        value:
        - key: truncated_sha
          expression: "body.after.truncate(7)"
        - key: branch_name
          expression: "body.ref.split('/')[2]"
    bindings:
    - ref: github-push
    template:
      ref: github-pipelinerun

现在,您可以使用 Ingress 公开该 EventListener,以接收来自任何 GitHub 存储库的通知。