来自 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 存储库的通知。
我正在学习 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 存储库的通知。