0

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

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

Eventlistener - Trigger - TriggerTemplate - Pipeline

以上所有步骤基本上都是您需要采取的配置步骤(以及要创建和维护的文件),一个比另一个更容易,但据我所知,您维护的每个存储库也需要采取这些步骤。与 github 操作相比,我只需要在我的 repo 中使用 1 个文件来描述我需要的所有内容,这似乎非常复杂(如果不麻烦的话)。

我错过了什么吗?或者这只是要走的路?谢谢 !

4

1 回答 1

0

您还需要为您维护的每个回购采取它们

你在这里弄错了。

EventListener 接收 webhook 的负载。

根据您的 TriggerBinding,您可以将该 GitHub 有效负载中的字段映射到变量,例如您的输入存储库名称/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

使用以下事件监听器:

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 存储库的通知。

于 2022-01-01T14:32:28.703 回答