《OpenShift 4.x HOL教程汇总》
说明:本文已经在OpenShift 4.8环境中验证

《OpenShift 4 - DevSecOps Workshop 系列视频 》

文章目录

  • Tekton Trigger 的运行机制
  • 为 tasks-dev-pipeline 管道配置 Trigger 相关对象
    • 为 Git 配置 Webhook
  • 为 tasks-stage-pipeline 管道配置 Trigger 相关对象
    • 方法1
    • 方法2
    • 触发 Trigger
  • 在 tasks-dev-pipeline 中启动 tasks-stage-pipeline
  • 其他 - EventListener 调试方法

本节将通过Tekton的Trigger机制启动运行这两个Pipeline。其中“ tasks-stage-pipeline”管道独立于“ tasks-dev-pipeline”管道,这是因为可以允许“ tasks-stage-pipeline”管道是通过人工启动运行,而“ tasks-dev-pipeline”管道是在Gitea上的应用代码变化后被自动触发。

Tekton Trigger 的运行机制

外部事件可以通过Route->Service->TriggerBinding将触发Pipeline的参数传给运行Trigger的Pod。EventListener按照TriggerTemplate的内容创建对应的PipelineRun对象运行管道。

为 tasks-dev-pipeline 管道配置 Trigger 相关对象

  1. 创建TriggerTemplate对象,该对象将关联Trigger要运行的Pipeline,在这里是“tasks-dev-pipeline”管道。
$ oc apply -f - << EOF
apiVersion: triggers.tekton.dev/v1alpha1
kind: TriggerTemplate
metadata:name: dev-tekton-tasks-trigger-templatenamespace: ${CICD}
spec:resourcetemplates:- apiVersion: tekton.dev/v1beta1kind: PipelineRunmetadata:generateName: dev-tekton-tasks-triggered-spec:pipelineRef:name: tasks-dev-pipelineresources:- name: pipeline-sourceresourceRef:name: tasks-source-codeserviceAccountName: pipelineworkspaces:- name: local-maven-repopersistentVolumeClaim:claimName: maven-repo-pvc
EOF
  1. 创建TriggerBinding对象。
$ oc apply -f - << EOF
apiVersion: triggers.tekton.dev/v1alpha1
kind: TriggerBinding
metadata:name: dev-tekton-tasks-trigger-bindingnamespace: ${CICD}
EOF
  1. 创建EventListener对象,定义了名为"gitea-event"的触发器,并使用“dev-tekton-tasks-trigger-binding”和“dev-tekton-tasks-trigger-template”。在创建完EventListener后会自动创建对应的Deployment和Service等对象。
$ oc apply -f - << EOF
apiVersion: triggers.tekton.dev/v1alpha1
kind: EventListener
metadata:name: dev-tekton-event-listenernamespace: ${CICD}
spec:serviceAccountName: pipelinetriggers:- name: gitea-eventbindings:- ref: dev-tekton-tasks-trigger-bindinginterceptors:- cel:filter: body.secret == "secret1234"template:ref: dev-tekton-tasks-trigger-template
EOF
  1. 基于Service创建Route,最后可以在OpenShift的“拓扑”界面中查看“user1-cicd”项目中部署的和EventListener相关的资源,复制下Route的地址。
$ oc expose svc el-dev-tekton-event-listener -n ${CICD}
$ oc get route el-dev-tekton-event-listener -ojsonpath={.spec.host} -n ${CICD}

el-dev-tekton-event-listener

为 Git 配置 Webhook

  1. 用和OpenShift相同的用户登录Gitea控制台,在用户的“openshift-tasks”仓库中进入“仓库设置”中的“管理Web钩子”,然后在“添加Web钩子”中选择“Gitea”。

  2. 在“添加Web钩子”页面中把前面获得的“EventListener”的Route地址作为“目标URL”地址(注意前面需要有“http://”)。在“秘钥文本”中填入“secret1234”,最后点击“添加Web钩子”按钮。

  3. 在“成功”页面后点击Web钩子的链接,然后找到页面下方的“最近推送记录”区域,最后点击“测试推送”按钮。此后页面将显示下图的推送结果。

  4. 在OpenShift控制台中进入“user1-cicd”项目的“dev-tekton-tasks”管道,在其对应的“管道运行”中找到“dev-tekton-tasks-triggered-xxxx”并进入查看Pipeline的运行状态和日志。这样Webhook就可以成功启动运行Pipeline了。

为 tasks-stage-pipeline 管道配置 Trigger 相关对象

方法1

  1. 为了触包括TriggerTemplate、TriggerBinding、EventListener三个对象。其中TriggerTemplate对象关联了“tasks-stage-pipeline”管道,并增加了一个名为“app_ver”的TriggerTemplate级别参数,该参数用来指定向STAGE区域部署镜像的“ImageStreamTag”。为了获得该参数的值,在TriggerBinding中也有“app_ver”参数,这样我们可以通过基于REST的Trigger访问接口将参数值传给TriggerBinding的“app_ver”参数。
$ oc apply -f - << EOF
apiVersion: triggers.tekton.dev/v1alpha1
kind: TriggerBinding
metadata:name: tasks-stage-pipeline-trigger-bindingnamespace: ${CICD}
spec: params: - name: app_vervalue: \$(body.app_ver)
---
apiVersion: triggers.tekton.dev/v1alpha1
kind: TriggerTemplate
metadata:name: tasks-stage-pipeline-trigger-templatenamespace: ${CICD}
spec:params:- name: app_verdescription: App version / gitsha to deployresourcetemplates:- apiVersion: tekton.dev/v1beta1kind: PipelineRunmetadata:generateName: tasks-stage-pipeline-triggered-spec:pipelineRef:name: tasks-stage-pipelineserviceAccountName: pipelineparams:- name: app_versionvalue: \$(tt.params.app_ver)
---
apiVersion: triggers.tekton.dev/v1alpha1
kind: EventListener
metadata:name: stage-tekton-event-listenernamespace: ${CICD}
spec:serviceAccountName: pipelinetriggers:- name: curl-eventbindings:- ref: tasks-stage-pipeline-trigger-bindinginterceptors:- cel:filter: body.secret == "secret1234"template:ref: tasks-stage-pipeline-trigger-template
EOF
  1. 根据Trigger的Service生成Route,未来可以通过向该Route发送参数从而实现人工触发该Pipeline。
$ oc expose svc el-stage-tekton-event-listener -n ${CICD}

方法2

  1. 先创建TriggerBinding对象,说明Trigger从HTTP Body中获取“app_ver”参数。
$ oc apply -f - << EOF
apiVersion: triggers.tekton.dev/v1alpha1
kind: TriggerBinding
metadata:name: tasks-stage-pipeline-trigger-bindingnamespace: ${CICD}
spec: params: - name: app_vervalue: \$(body.app_ver)
EOF
  1. 在OpenShift控制台中进入“tasks-stage-pipeline”管道,在“操作”下拉菜单中进入“添加触发器”。
  2. 在“添加触发器”对话框中,按照下图配置,然后点击“添加”。
    Git 供应商类型:tasks-stage-pipeline-trigger-binding
    app_version:$(tt.params.app_ver)
  3. 在控制台上刷新查看“tasks-stage-pipeline”管道,确认出现 TriggerTemplate 触发模板,其中TriggerTemplate的名称是根据TriggerBinding自动生成的,另外下方的链接是OpenShift自动生成访问Trigger的Route地址。

    进入 TriggerTemplate 触发模板,可以查看这个TriggerTemplate关联的 Pipeline 和 EentListener 对象,其中 EentListener 对象名称也是自动生成的。

触发 Trigger

  1. 获取启动“tasks-stage-pipeline”管道的Route。
$ LISTENER_URL=$(oc get route el-stage-tekton-event-listener -n ${CICD} -ojsonpath={.spec.host})
  1. 为了测试,我们根据现有“DEV”区域的ImageStreamTag(“tekton-tasks:latest”)生成一个名为“tekton-tasks:foobar1”新ImageStreamTag。
$ oc tag tekton-tasks:latest tekton-tasks:foobar1 -n ${DEV}
Tag tekton-tasks:foobar1 set to tekton-tasks@sha256:8f01f4dad4d98b2884df121bde031ba45a6894eb21de658d2fa5d05fd4dfe1b0.
  1. 执行命令触发执行“tasks-stage-pipeline”管道,其中指定了使用“foobar1”的镜像。
$ curl -X POST -d '{"app_ver":"foobar1", "secret":"secret1234"}' ${LISTENER_URL}
{"eventListener":"stage-tekton-event-listener","namespace":"user1-cicd","eventListenerUID":"a84a7159-3cb9-48e2-b1b9-de35c9565117","eventID":"42ead008-728f-4292-8735-703b4051bbc2"}
  1. 执行命令查看管道运行的日志,确认执行成功,并且使用的是“tekton-tasks:foobar1”镜像。
$ tkn pipeline logs tasks-stage-pipeline -L -n ${CICD}
Tagging image stream in user1-stage/tekton-tasks:foobar1
Tag user1-stage/tekton-tasks:foobar1 set to user1-dev/tekton-tasks@sha256:ddfbcb129da0dc3eaafd0cff93f59f40a66302f6d51b4b9419a82dd203205612.
。。。

在 tasks-dev-pipeline 中启动 tasks-stage-pipeline

  1. 创建以下任务,调用tasks-stage-pipeline管道的触发器访问地址。
$ oc apply -f - << EOF
apiVersion: tekton.dev/v1beta1
kind: Task
metadata:name: start-update-gitops-pipeline-tasknamespace: user1-cicd
spec:params:- description: The git revision/sha to tag the created image withname: app_vertype: stringsteps:- image: registry.access.redhat.com/ubi8/ubi-minimalname: start-update-gitopresources: {}script: >#!/usr/bin/env bashcurl -X POST -d '{"app_ver":"$(params.app_ver)", "secret":"secret1234"}' ${LISTENER_URL}
EOF
  1. 在“tasks-stage-pipeline”管道中追加以下内容调用“start-update-gitops-task”任务。
    - name: start-update-gitops-pipelineparams:- name: app_vervalue: $(tasks.git-rev.results.gitsha)runAfter:- container-vulnerability-scan- oscap-image-scan- deploy-to-devtaskRef:kind: Taskname: start-update-gitops-pipeline-task
  1. 再次运行“tasks-stage-pipeline”管道,确认它可以成功启动“tasks-stage-pipeline”管道。

其他 - EventListener 调试方法

  1. 查看EventListener 日志
$ tkn eventlistener logs stage-tekton-event-listener -n $CICD
[stage-tekton-event-listener-el-stage-tekton-event-listener-5b7b4d7b5c-56zdp]: {"level":"info","ts":"2021-08-19T12:51:24.032Z","logger":"eventlistener","caller":"sink/sink.go:274","msg":"ResolvedParams : [{Name:app_ver Value:foobar1}]","knative.dev/controller":"eventlistener","eventlistener":"stage-tekton-event-listener","namespace":"user1-cicd","eventlistenerUID":"a84a7159-3cb9-48e2-b1b9-de35c9565117","/triggers-eventid":"670cd658-bbf6-46f0-8a2c-f0c5b6bdac25","/trigger":"curl-event"}
[stage-tekton-event-listener-el-stage-tekton-event-listener-5b7b4d7b5c-56zdp]: {"level":"info","ts":"2021-08-19T12:51:24.036Z","logger":"eventlistener","caller":"resources/create.go:98","msg":"Generating resource: kind: &APIResource{Name:pipelineruns,Namespaced:true,Kind:PipelineRun,Verbs:[delete deletecollection get list patch create update watch],ShortNames:[pr prs],SingularName:pipelinerun,Categories:[tekton tekton-pipelines],Group:tekton.dev,Version:v1beta1,StorageVersionHash:RcAKAgPYYoo=,}, name: tasks-stage-pipeline-triggered-","knative.dev/controller":"eventlistener"}
[stage-tekton-event-listener-el-stage-tekton-event-listener-5b7b4d7b5c-56zdp]: {"level":"info","ts":"2021-08-19T12:51:24.036Z","logger":"eventlistener","caller":"resources/create.go:106","msg":"For event ID \"670cd658-bbf6-46f0-8a2c-f0c5b6bdac25\" creating resource tekton.dev/v1beta1, Resource=pipelineruns","knative.dev/controller":"eventlistener"}
  1. 设置EventListener 日志级别
$ oc patch cm config-logging-triggers -p '{"data": {"loglevel.eventlistener": "debug"}}' -n ${CICD}
$ oc patch cm config-logging-triggers -p '{"data": {"loglevel.eventlistener": "info"}}' -n ${CICD}

OpenShift 4 - DevSecOps Workshop (11) - 通过Trigger启动Pipeline运行相关推荐

  1. OpenShift 4 - DevSecOps Workshop (4) - 为 Task 增加参数和Workspace

    <OpenShift 4.x HOL教程汇总> 说明:本文已经在OpenShift 4.8环境中验证 <OpenShift 4 - DevSecOps Workshop 系列视频 & ...

  2. OpenShift 4 - DevSecOps Workshop (5) - 为Pipeline增加测试Task

    <OpenShift 4.x HOL教程汇总> 说明:本文已经在OpenShift 4.8环境中验证 <OpenShift 4 - DevSecOps Workshop 系列视频 & ...

  3. OpenShift 4 - DevSecOps Workshop (2) - 运行一个基于Tekton的Pipeline示例

    <OpenShift 4.x HOL教程汇总> 说明:本文已经在OpenShift 4.8环境中验证 <OpenShift 4 - DevSecOps Workshop 系列视频 & ...

  4. [OpenShift 4 - DevSecOps Workshop (16) - 使用 VSCode 编辑运行 Tekton Pipeline 资源

    <OpenShift 4.x HOL教程汇总> 说明:本文已经在OpenShift 4.8环境中验证 <OpenShift 4 - DevSecOps Workshop 系列视频 & ...

  5. OpenShift 4 - DevSecOps Workshop (15) - 利用OpenShift GitOps向多个目标部署应用

    <OpenShift 4.x HOL教程汇总> 说明:本文已经在OpenShift 4.8环境中验证 <OpenShift 4 - DevSecOps Workshop 系列视频 & ...

  6. OpenShift 4 - DevSecOps Workshop (14) - 镜像合规扫描

    <OpenShift 4.x HOL教程汇总> 说明:本文已经在OpenShift 4.8环境中验证 <OpenShift 4 - DevSecOps Workshop 系列视频 & ...

  7. OpenShift 4 - DevSecOps Workshop (13) - 将镜像推送到Quay,并进行漏洞扫描

    <OpenShift 4.x HOL教程汇总> 说明:本文已经在OpenShift 4.8环境中验证 <OpenShift 4 - DevSecOps Workshop 系列视频 & ...

  8. OpenShift 4 - DevSecOps Workshop (12) - 用CodeReady Workspace编辑提交应用代码

    <OpenShift 4.x HOL教程汇总> 说明:本文已经在OpenShift 4.8环境中验证 <OpenShift 4 - DevSecOps Workshop 系列视频 & ...

  9. OpenShift 4 - DevSecOps Workshop (10) - 向Stage环境部署应用镜像

    <OpenShift 4.x HOL教程汇总> 说明:本文已经在OpenShift 4.8环境中验证 <OpenShift 4 - DevSecOps Workshop 系列视频 & ...

最新文章

  1. 为什么高手都懂得拆解目标?
  2. 解读4G发牌事件,了解下4G那点事!
  3. JNDI数据库连接池的配置
  4. Python 通过all()判断列表(list)中所有元素是否都包含某个字符串(string)
  5. Oracle怎么算开始一个会话,oracle – 随机获取ORA-08177只有一个活动会话
  6. lds天线技术流程图_音箱耳机入门,蓝牙真无线耳机中的LDS天线 「Soomal」
  7. 面试提问vue中v-if与v-show的区别以及使用场景
  8. chart.js 饼图显示百分比_Excel制作华夫饼图,其实很简单
  9. 有学问,还是牛逼啊!
  10. Word排版艺术—读书笔记
  11. 华为鸿蒙内涵,“鸿蒙”两个字有何真意,还得让古人来解读
  12. 有关GUASS高斯数据库的语法汇总(获取字符串字节数等)
  13. Android MediaPlayer整体架构源码分析 -【MediaCodec编解码器插件模块化注册和创建处理流程】【Part 6】
  14. 微信小程序之weui的引用及使用说明
  15. 车载网络: 常见车载网络
  16. C/C++_atoi,itoa功能及其实现原理
  17. clamp.js 使用
  18. VMware安装centos虚拟机
  19. 0x000000f怎么修复 win10_0xc000000f修复引导win10步骤
  20. Google Play 上架总结(二)Google账户关联详解

热门文章

  1. 增益和偏移的概念_高速ADC的关键指标:量化误差、offset/gain error、DNL、INL、ENOB、分辨率、RMS、SFDR、THD、SINAD、dBFS、TWO...
  2. centos 卸载docker_linux系统Docker安装及卸载
  3. 3d打印英语文献_DMD 激光熔覆3D打印机型设计在仿真计算中的经验分享
  4. 在保护继承中基类的共有成员_C++学习刷题13--继承的实现、继承的方式
  5. c语言的时间函数的介绍,c语言中时间函数介绍
  6. java年轻代频繁gc_年轻代频繁ParNew GC,导致http服务rt飙高
  7. kafka c语言实现源码,Spring-Kafka源代码解析(消费者)
  8. 美工设计灵感|常见的电商页面如何设计?
  9. 福字背景|传统中国风国潮设计必备素材!
  10. 分层精品优秀电商海报模版|无需数量多,胜在精