3.2.2.6. 触发器
使用触发器(Trigger)和 Pipelines 一起创建一个完整的 CI/CD 系统,其中 Kubernetes 资源定义整个 CI/CD 执行。触发器捕获外部事件,如 Git 拉取请求,并处理它们以获取关键信息。将这个事件数据映射到一组预定义的参数会触发一系列任务,然后创建和部署 Kubernetes 资源并实例化管道。
例如,您可以使用 Red Hat OpenShift Pipelines 为应用程序定义 CI/CD 工作流。管道必须启动,才能在应用程序存储库中使任何新的更改生效。通过捕获和处理任何更改事件,并通过触发器部署新镜像的管道运行来自动触发这个过程。
触发器由以下主要资源组成,它们可一起组成可重复使用、分离和自力更生的 CI/CD 系统:
TriggerBinding
资源验证事件,从事件有效负载中提取字段,并将它们保存为参数。以下示例显示了
TriggerBinding
资源的代码片段,它从接收的事件有效负载中提取 Git 存储库信息:apiVersion: triggers.tekton.dev/v1alpha1 1 kind: TriggerBinding 2 metadata: name: vote-app 3 spec: params: 4 - name: git-repo-url value: $(body.repository.url) - name: git-repo-name value: $(body.repository.name) - name: git-revision value: $(body.head_commit.id)
TriggerTemplate
资源充当创建资源的方式标准。它指定了TriggerBinding
资源中参数化数据的方式。触发器模板从触发器绑定接收输入,然后执行一系列操作来创建新管道资源,并启动新管道运行。以下示例显示了
TriggerTemplate
资源的代码片段,它使用您刚创建的TriggerBinding
资源提供的 Git 存储库信息创建一个管道运行:apiVersion: triggers.tekton.dev/v1alpha1 1 kind: TriggerTemplate 2 metadata: name: vote-app 3 spec: params: 4 - name: git-repo-url description: The git repository url - name: git-revision description: The git revision default: pipelines-1.4 - name: git-repo-name description: The name of the deployment to be created / patched resourcetemplates: 5 - apiVersion: tekton.dev/v1beta1 kind: PipelineRun metadata: name: build-deploy-$(tt.params.git-repo-name)-$(uid) spec: serviceAccountName: pipeline pipelineRef: name: build-and-deploy params: - name: deployment-name value: $(tt.params.git-repo-name) - name: git-url value: $(tt.params.git-repo-url) - name: git-revision value: $(tt.params.git-revision) - name: IMAGE value: image-registry.openshift-image-registry.svc:5000/pipelines-tutorial/$(tt.params.git-repo-name) workspaces: - name: shared-workspace volumeClaimTemplate: spec: accessModes: - ReadWriteOnce resources: requests: storage: 500Mi
Trigger
资源连接TriggerBinding
和TriggerTemplate
资源,这个Trigger
资源在EventListener
规格中被引用。以下示例显示了一个
Trigger
资源的代码片段,名为vote-trigger
,它连接TriggerBinding
和TriggerTemplate
资源。apiVersion: triggers.tekton.dev/v1alpha1 1 kind: Trigger 2 metadata: name: vote-trigger 3 spec: serviceAccountName: pipeline 4 bindings: - ref: vote-app 5 template: 6 ref: vote-app
EventListener
资源提供一个端点或事件接收器(sink),用于使用 JSON 有效负载侦听传入的基于 HTTP 的事件。它从每个TriggerBinding
资源提取事件参数,然后处理此数据以按照对应的TriggerTemplate
资源指定的 Kubernetes 资源创建 Kubernetes 资源。EventListener
资源还使用事件interceptors(拦截器)
在有效负载上执行轻量级事件处理或基本过滤,这可识别有效负载类型并进行自选修改。目前,管道触发器支持四种拦截器: Webhook Interceptors、GitHub Interceptors、GitLab Interceptors 和 Common Expression Language(CEL)Interceptors。以下示例显示了一个
EventListener
资源,它引用名为vote-trigger
的Trigger
资源。apiVersion: triggers.tekton.dev/v1alpha1 1 kind: EventListener 2 metadata: name: vote-app 3 spec: serviceAccountName: pipeline 4 triggers: - triggerRef: vote-trigger 5
Red Hat OpenShift Pipelines 中的触发器支持 HTTP(不安全)和 HTTPS(安全 HTTP)连接到 Eventlistener
资源。使用安全 HTTPS 连接,您可以在集群内部和外部获得端到端安全连接。创建命名空间后,您可以通过将 operator.tekton.dev/enable-annotation=enabled
标签添加到命名空间,然后创建一个 Trigger
资源以及使用重新加密 TLS 终止的安全路由,从而为 Eventlistener
资源启用这个安全 HTTPS 连接。