Tekton 基于 gitlab 触发流水线

Tekton 基于 gitlab 触发流水线

Tekton EventListener 在8080端口监听事件,Gitlab 提交代码产生push 事件,gitlab webhook触发tekton流水线执行。
在这里插入图片描述

前置要求:

  • kubernetes集群中已部署 tekton pipelinetekton triggers以及tekton dashboard 三个组件;
  • 本示例使用LoadBalancer 暴露 EventListener service,集群中有可用负载均衡器分配IP地址。

创建serviceaccount

官方示例:https://github.com/tektoncd/triggers/blob/main/examples/rbac.yaml

因为 EventListener 最终需要创建 taskrun、pipelinerun 同时会查询一些其他信息,因此需要为其配置一个 serviceAccount,同时还需要为这个 serviceAccount 赋予相应的权限。

$ cat serviceAccount.yaml
apiVersion: v1
kind: ServiceAccount
metadata:name: tekton-triggers-example-sa
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:name: triggers-example-eventlistener-binding
subjects:
- kind: ServiceAccountname: tekton-triggers-example-sa
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: tekton-triggers-eventlistener-roles
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:name: triggers-example-eventlistener-clusterbinding
subjects:
- kind: ServiceAccountname: tekton-triggers-example-sanamespace: default
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: tekton-triggers-eventlistener-clusterroles

应用yaml

kubectl apply -f serviceAccount.yaml

创建EventListener

EventListener 是一个 Kubernetes 对象,用于侦听 Kubernetes 集群上指定端口上的事件。它公开了一个可寻址接收器,用于接收传入事件并指定一个或多个 Triggers 。

$ cat eventListener.yaml
apiVersion: triggers.tekton.dev/v1beta1
kind: EventListener
metadata:name: gitlab-pr
spec:serviceAccountName: tekton-triggers-example-saresources:kubernetesResource:serviceType: LoadBalancertriggers:- name: pr-triggerbindings:- ref: gitlab-pr-trigger-bindingtemplate:ref: gitlab-pr-trigger-template

应用yaml

kubectl apply -f eventListener.yaml

创建TriggerBinding

TriggerBinding 允许您从事件负载中提取字段并将它们绑定到命名参数,然后可以在 TriggerTemplate 中使用这些命名参数。

$ cat triggerBinding.yaml
apiVersion: triggers.tekton.dev/v1beta1
kind: TriggerBinding
metadata:name: gitlab-pr-trigger-binding
spec:params:- name: messagevalue: hello

应用yaml

kubectl apply -f triggerBinding.yaml

创建TriggerTemplate

TriggerTemplate 是指定资源蓝图的资源,例如 TaskRun 或 PipelineRun ,当您的EventListener 检测到事件。它公开了您可以在资源模板中的任何位置使用的参数。

以下示例通过pipelineSpectaskSpec直接引入task并运行:

$ cat triggerTemplate.yaml
apiVersion: triggers.tekton.dev/v1beta1
kind: TriggerTemplate
metadata:name: gitlab-pr-trigger-template
spec:params:- name: messagedefault: helloresourcetemplates:- apiVersion: tekton.dev/v1beta1kind: PipelineRunmetadata:generateName: hello-spec:params:- name: messagevalue: $(tt.params.message)pipelineSpec:tasks:- name: hello-messagetaskSpec:steps:- name: run-helloimage: alpinescript: |echo $(params.message)

应用yaml

kubectl create -f triggerTemplate.yaml

完整示例

$ cat githlab_trigger.yaml
apiVersion: v1
kind: ServiceAccount
metadata:name: tekton-triggers-example-sa
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:name: triggers-example-eventlistener-binding
subjects:
- kind: ServiceAccountname: tekton-triggers-example-sa
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: tekton-triggers-eventlistener-roles
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:name: triggers-example-eventlistener-clusterbinding
subjects:
- kind: ServiceAccountname: tekton-triggers-example-sanamespace: default
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: tekton-triggers-eventlistener-clusterroles---
apiVersion: triggers.tekton.dev/v1beta1
kind: EventListener
metadata:name: gitlab-pr
spec:serviceAccountName: tekton-triggers-example-saresources:kubernetesResource:serviceType: LoadBalancertriggers:- name: pr-triggerbindings:- ref: gitlab-pr-trigger-bindingtemplate:ref: gitlab-pr-trigger-template
---
apiVersion: triggers.tekton.dev/v1beta1
kind: TriggerBinding
metadata:name: gitlab-pr-trigger-binding
spec:params:- name: messagevalue: hello
---
apiVersion: triggers.tekton.dev/v1beta1
kind: TriggerTemplate
metadata:name: gitlab-pr-trigger-template
spec:params:- name: messagedefault: helloresourcetemplates:- apiVersion: tekton.dev/v1beta1kind: PipelineRunmetadata:generateName: hello-spec:params:- name: messagevalue: $(tt.params.message)pipelineSpec:tasks:- name: hello-messagetaskSpec:steps:- name: run-helloimage: alpinescript: |echo $(params.message)

应用以上配置

kubectl create -f githlab_trigger.yaml

配置gitlab webhook

查看EventListener service 监听地址和端口

root@kube001:~# kubectl get svc
NAME           TYPE           CLUSTER-IP    EXTERNAL-IP      PORT(S)                         AGE
el-gitlab-pr   LoadBalancer   10.96.0.235   192.168.72.224   8080:31293/TCP,9000:30628/TCP   8m7s

EventListener service 使用LoadBalancer 方式暴露到集群外,访问地址为:

http://192.168.72.224:8080

访问自建 gitlab 管理界面,新建demo项目,在项目Settings---> Webhooks中配置 EventListener 监听地址:

在这里插入图片描述

点击Push events进行测试,或者推送代码到gitlab项目仓库

在这里插入图片描述
点击Edit查看测试结果
在这里插入图片描述

查看触发的pipeline任务

root@kube001:~# kubectl get pipelineruns | grep hello
hello-vrrs2                      True        Succeeded                  4m42s       4m34s

查看运行完成的pods

root@kube001:~# kubectl get pods
NAME                                                    READY   STATUS       RESTARTS   AGE
el-gitlab-pr-5f5749d48f-rqmlb                           1/1     Running      0          12m
hello-vrrs2-hello-message-pod                           0/1     Completed    0          5m49s

访问dashboard查看自动执行的pipelinerun

在这里插入图片描述

任务详情

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/277217.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c YUV 转 JPEG(准备霍夫曼编码)

先取yuv 文件中一个168的块,跑通全流程 理解与思路: 1.块分割 YUV 文件分为:YUV444 YUV 422 YUV420。444:就是:12个char 有4个Y,4个U,4个 U,422:8个char 中有4个Y &#x…

Python (九)requests

程序员的公众号:源1024,获取更多资料,无加密无套路! 最近整理了一波电子书籍资料,包含《Effective Java中文版 第2版》《深入JAVA虚拟机》,《重构改善既有代码设计》,《MySQL高性能-第3版》&…

C++之模板

目录 泛型编程 模板 函数模板 函数模板的实例化 隐式实例化 显示实例化 类模板 我们知道STL(标准模板库)是C学习的精华所在,在学习STL之前我们得先学习一个新的知识点-------模板。那么模板究竟是什么呢?围绕着这个问题&a…

算法训练营Day14

#Java #二叉树层次遍历 #反转二叉树 开源学习资料 二叉树的层次遍历:力扣题目链接 二叉树的层次遍历很好理解: 就是从根结点一层一层地往下遍历(同一层,从左到右): 迭代的方式很好理解:就是…

【Axure RP9】动态面板使用------案例:包括轮播图和多方式登入及左侧菜单栏案例

目录 一 动态面板简介 1.1 动态面板是什么 二 轮播图 2.1 轮播图是什么 2.2 轮播图应用场景 2.3 制作实播图 三 多方式登入 3.1多方式登入是什么 3.3 多方式登入实现 四 左侧菜单栏 4.1左侧菜单栏是什么 4.2 左侧菜单栏实现 一 动态面板简介 1.1 动态面板是什么…

嵌入式系统挑战赛题目----简单栈数据结构

一、题目要求 实现一个简单的栈数据结构。栈是一种后进先出线性数据结构,只能在一端进行插入和删除操作。请编写一个C语言程序,实现包括栈的初始化、入栈、出栈以及判断栈是否为空等基本操作。 请根据要求在begin、end间完成代码,不要改变代…

高速无刷直流电机霍尔板在高速无刷直流三相电机上是一个什么样的角色

目录 一、0-30阶段 二、30-60阶段 三、60-90阶段 三相电机在各领域应用广泛,是现代工业和生活的重要设备。三相全波无刷电机的旋转原理可以分为0-90旋转的详细说明如下: 首先,我们以一个三相60相带的无刷直流电机为例,来说明其…

【Linux】进程周边004之进程的调度与切换(领略Linux系统进程调度算法的神奇)

👀樊梓慕:个人主页 🎥个人专栏:《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》《Linux》 🌝每一个不曾起舞的日子,都是对生命的辜负 目录 前言 1.进程切换 2.进程调度 2.…

VBA_MF系列技术资料1-242

MF系列VBA技术资料 为了让广大学员在VBA编程中有切实可行的思路及有效的提高自己的编程技巧,我参考大量的资料,并结合自己的经验总结了这份MF系列VBA技术综合资料,而且开放源码(MF04除外),其中MF01-04属于定…

【多线程】Java中多线程的几种实现方式

多线程(multithreading)是指在一个程序中同时执行多个不同的线程(thread),每个线程都是程序的一部分,是独立的执行路径。相比于单线程程序,多线程程序可以更充分地利用计算机的多核心或多处理器…

PyTorch: 基于【VGG16】处理MNIST数据集的图像分类任务【准确率98.9%+】

目录 引言在Conda虚拟环境下安装pytorch步骤一:利用代码自动下载mnist数据集步骤二:搭建基于VGG16的图像分类模型步骤三:训练模型步骤四:测试模型运行结果后续模型的优化和改进建议完整代码结束语 引言 在本博客中,小…

对不起,必须放弃SQL!

尽管SQL很受欢迎,也很成功,但它又总是充斥着种种矛盾。 SQL可能笨拙又冗长,但开发人员又经常发现它往往是他们提取所需数据的最简单直接的方法。当查询写入正确时,它可以快如闪电,当查询出错时,它就会慢如…