Tekton系列之实践篇-从触发到完成的完整执行过程

news2025/4/1 5:59:03

以下介绍的是基于 Gitee 仓库 的 Tekton 工作流程

操作流程

定义task

克隆代码的task

# task-clone.yaml
apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
  name: git-clone
spec:
  workspaces:
    - name: source  # 工作目录
  params:
    - name: repo-url  # 你的 Gitee 仓库地址
      type: string
      default: "https://gitee.com/wyxsxx/wyx123.git"
    - name: branch    # 分支名称
      type: string
      default: "main"
  steps:
    - name: clone
      image: alpine/git  # 使用轻量级 Git 镜像
      script: |
        git clone -b $(params.branch) $(params.repo-url) $(workspaces.source.path)/app

 执行自定义脚本的 Task

# task-script.yaml
apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
  name: run-script
spec:
  workspaces:
    - name: source
  steps:
    - name: run-custom-script
      image: alpine:3.15  # 按需替换为 Python/Node.js 等镜像
      workingDir: "$(workspaces.source.path)/app"
      script: |
        # 这里执行你的自定义脚本(示例:打印文件列表)
        echo "=== 文件列表 ==="
        ls -l
        echo "==============="

 定义 Pipeline

# pipeline.yaml
apiVersion: tekton.dev/v1beta1
kind: Pipeline
metadata:
  name: simple-demo-pipeline
spec:
  workspaces:
    - name: shared-data  # 共享存储目录
  params:
    - name: git-url
      type: string
      default: "https://gitee.com/wyxsxx/wyx123.git"
  tasks:
    - name: clone-repo
      taskRef:
        name: git-clone
      workspaces:
        - name: source
          workspace: shared-data
      params:
        - name: repo-url
          value: "$(params.git-url)"
    
    - name: run-script
      taskRef:
        name: run-script
      runAfter: ["clone-repo"]  # 依赖 clone 任务
      workspaces:
        - name: source
          workspace: shared-data

 运行 Pipeline

# pipelinerun.yaml
apiVersion: tekton.dev/v1beta1
kind: PipelineRun
metadata:
  generateName: simple-demo-run-
spec:
  pipelineRef:
    name: simple-demo-pipeline
  workspaces:
    - name: shared-data
      volumeClaimTemplate:  # 自动创建 PVC
        spec:
          accessModes:
            - ReadWriteOnce
          resources:
            requests:
              storage: 1Gi
  params:
    - name: git-url
      value: "https://gitee.com/wyxsxx/wyx123.git"

 执行和验证

# 部署 Task 和 Pipeline
kubectl apply -f task-clone.yaml
kubectl apply -f task-script.yaml
kubectl apply -f pipeline.yaml

# 触发流水线
kubectl create -f pipelinerun.yaml

查看运行状态

[root@k8s-master ~]# kubectl get pod
NAME                                                READY   STATUS        RESTARTS   AGE
affinity-assistant-a953a26f33-0                     0/1     Terminating   0          25s
simple-demo-run-18ppnc-clone-repo-fg8kp-pod-j2vgt   0/1     Completed     0          25s
simple-demo-run-18ppnc-run-script-vprlh-pod-kqhxx   0/1     Completed     0          14s
[root@k8s-master ~]# kubectl get pvc
NAME             STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
pvc-a953a26f33   Bound    pvc-46ceb060-aa14-488c-a2df-f2da70643786   1Gi        RWO            local-path     47s
[root@k8s-master ~]# kubectl get pod -w
NAME                                                READY   STATUS      RESTARTS   AGE
simple-demo-run-18ppnc-clone-repo-fg8kp-pod-j2vgt   0/1     Completed   0          58s
simple-demo-run-18ppnc-run-script-vprlh-pod-kqhxx   0/1     Completed   0          47s
^C[root@k8s-master ~]# kubectl get svc
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   108m
[root@k8s-master ~]# kubectl get pvc
NAME             STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
pvc-a953a26f33   Bound    pvc-46ceb060-aa14-488c-a2df-f2da70643786   1Gi        RWO            local-path     102s

实时查看日志

[root@k8s-master tekton-test]# tkn pipelinerun logs -f
? Select pipelinerun:  [Use arrows to move, type to filter]
> simple-demo-run-1697gz started 1 second ago
  simple-demo-run-18ppnc started 2 minutes ago

dashbord查看是否执行成功 

流程图解

+---------------------+
| PipelineRun 触发     |
+---------------------+
         |
         V
+---------------------+
| 1. clone-repo       |
|   - 克隆代码到 PVC   |
+---------------------+
         |
         V
+---------------------+
| 2. run-script       |
|   - 执行自定义脚本   |
+---------------------+

分布流程详解

1.pipelinerun触发

用户执行kubectl create -f pipelinerun.yaml

tekton行为:

  • 创建pipelinerun实例
  • 解析关联的pipeline
  • 自动创建PVC用于共享工作目录

2.task顺序执行

2.1 克隆代码

集群内:

  • 创建taskrun
  • 生成pod

pod内操作:

# 容器内执行的实际命令
git clone -b main https://gitee.com/wyxsxx/wyx123.git /workspace/shared-data/app

 2.2 执行脚本

集群内操作:

  • 前一个task(clone-repo)成功后,创建taskrun(run-script)
  • 生成pod(run-script-pod)

pod内操作:

# 进入工作目录并执行脚本
cd /workspace/shared-data/app
echo "=== 文件列表 ==="
ls -l

3.资源清理

1. Workspaces 共享存储

  • PVC 自动创建
spec:
  pipelineRef:
    name: simple-demo-pipeline
  workspaces:
    - name: shared-data
      volumeClaimTemplate:  # 自动创建 PVC
        spec:
          storageClassName: local-path
          accessModes:
            - ReadWriteOnce
          resources:
            requests:
              storage: 1Gi

2. 依赖控制

  • Pipeline 任务顺序

 克隆完成 → PVC 数据就绪 → 触发脚本执行

3. 错误处理机制

  • 失败重试
retries: 2   # 失败后自动重试次数
  • 超时控制
timeout: 30m  # 超过30分钟则终止任务

 

四、实际执行日志示例

查看 PipelineRun 状态

[root@k8s-master tekton-test]# tkn pipelinerun list
NAME                     STARTED          DURATION   STATUS
simple-demo-run-1697gz   12 minutes ago   16s        Succeeded
simple-demo-run-18ppnc   14 minutes ago   18s        Succeeded

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【简单学习】Prompt Engineering 提示词工程

一、Prompt 1、Prompt 是什么&#xff1f; Prompt 是一种人为构造的输入序列&#xff0c;用于引导 GPT 模型根据先前输入的内容生成相关的输出。简单来说&#xff0c;就是你向模型提供的 “提示词”。 在 ChatGpt 中&#xff0c;我们可以通过设计不同的 prompt&#xff0c;让…

零基础入门网络爬虫第5天:Scrapy框架

4周 Srapy爬虫框架 不是一个简单的函数功能库&#xff0c;而是一个爬虫框架 安装&#xff1a;pip install scrapy 检测&#xff1a;scrapy -h Scrapy爬虫框架结构 爬虫框架 爬虫框架是实现爬虫功能的一个软件结构和功能组件集合爬虫框架是一个半成品&#xff0c;能够帮助…

C#设计模式快速回顾

知识点来源&#xff1a;人间自有韬哥在&#xff0c;豆包 目录 一、七大原则1. 单一职责原则 (Single Responsibility Principle)2. 开放封闭原则 (Open-Closed Principle)3. 里氏替换原则 (Liskov Substitution Principle)4. 接口隔离原则 (Interface Segregation Principle)5…

分页查询互动问题(用户端)

文章目录 概要整体架构流程技术细节小结 概要 需求分析以及接口设计 技术细节 1.Controller层 GetMapping("/page")ApiOperation("分页查询问题")public PageDTO<QuestionVO> queryQuestionPage(QuestionPageQuery query){return questionService…

【全队项目】智能学术海报生成系统PosterGenius(项目介绍)

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a;&#x1f3c0;大模型实战训练营_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前…

【线程安全问题的原因和方法】【java形式】【图片详解】

在本章节中采用实例图片的方式&#xff0c;以一个学习者的姿态进行描述问题解决问题&#xff0c;更加清晰明了&#xff0c;以及过程中会发问的问题都会一一进行呈现 目录 线程安全演示线程不安全情况图片解释&#xff1a; 将上述代码进行修改【从并行转化成穿行的方式】不会出…

解决IDEA中maven找不到依赖项的问题

直接去官网找到对应的依赖项jar包&#xff0c;并且下载到本地&#xff0c;然后安装到本地厂库中。 Maven官网&#xff1a;https://mvnrepository.com/ 一、使用mvn install:install-file命令 Maven提供了install:install-file插件&#xff0c;用于手动将jar包安装到本地仓库…

pyside6的QGraphicsView体系,当鼠标位于不同的物体,显示不同的右键菜单

代码&#xff1a; # 设置样本图片的QGraphicsView模型 from PySide6.QtCore import Qt, QRectF, QObject from PySide6.QtGui import QPainter, QPen, QColor, QAction, QMouseEvent from PySide6.QtWidgets import QGraphicsView, QGraphicsScene, QGraphicsPixmapItem, QGra…

Python自动化测试 之 DrissionPage 的下载、安装、基本使用详解

Python自动化测试 之 DrissionPage 使用详解 &#x1f3e1;前言&#xff1a;一、☀️DrissionPage的基本概述二、 &#x1f5fa;️环境安装2.1 ✅️️运行环境2.2 ✅️️一键安装 三、&#x1f5fa;️快速入门3.1 页面类&#x1f6f0;️ChromiumPage&#x1f6eb; SessionPage&…

Java替换jar包中class文件

在更新java应用版本的运维工作中&#xff0c;由于一些原因&#xff0c;开发没办法给到完整的jar包&#xff0c;这个时候&#xff0c;就可以只将修改后的某个Java类的class文件替换掉原来iar包中的class文件&#xff0c;重新启动服务即可&#xff1a; 1、将jar包和将要替换的cl…

AI Tokenization

AI Tokenization 人工智能分词初步了解 类似现在这个&#xff0c;一格子 一格子&#xff0c;拼接出来的&#xff0c;一行或者一句&#xff0c;像不像&#xff0c;我们人类思考的时候组装出来的话&#xff0c;并用嘴说出来了呢。

关于大数据的基础知识(四)——大数据的意义与趋势

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///计算机爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于大数据的基础知识&#xff08;四&a…

某视频的解密下载

下面讲一下怎么爬取视频&#xff0c;这个还是比小白的稍微有一点绕的 首先打开网址&#xff1a;aHR0cDovL3d3dy5wZWFydmlkZW8uY29tL3BvcHVsYXJfNA 首页 看一下&#xff1a; 有一个标题和一个href&#xff0c;href只是一个片段&#xff0c;待会肯定要拼接&#xff0c; 先找一…

Day20-前端Web案例——部门管理

目录 部门管理1. 前后端分离开发2. 准备工作2.1 创建Vue项目2.2 安装依赖2.3 精简项目 3. 页面布局3.1 介绍3.2 整体布局3.3 左侧菜单 4. Vue Router4.1 介绍4.2 入门4.3 案例4.4 首页制作 5. 部门管理5.1部门列表5.1.1. 基本布局5.1.2 加载数据5.1.3 程序优化 5.2 新增部门5.3…

从切图仔到鸿蒙开发01-文本样式

从切图仔到鸿蒙开发01-文本样式 本系列教程适合 HarmonyOS 初学者&#xff0c;为那些熟悉用 HTML 与 CSS 语法的 Web 前端开发者准备的。 本系列教程会将 HTML/CSS 代码片段替换为等价的 HarmonyOS/ArkUI 代码。 页面结构 HTML 与 ArkUI 在 Web 开发中&#xff0c;HTML 文档结…

菱形虚拟继承的原理

一 &#xff1a;菱形继承的问题 普通的菱形继承存在数据冗余和二义性的问题 &#xff0c;如下代码&#xff1a; class Person { public:string _name; //姓名 };class Student : public Person { protected:int _num; //学号 };class Teacher : public Person { protected:int…

【数据结构】C语言实现树和森林的遍历

C语言实现树和森林的遍历 导读一、树的遍历二、森林的遍历2.1 为什么森林没有后序遍历?2.2 森林中存不存在层序遍历?三、C语言实现3.1 准备工作3.2 数据结构的选择3.3 树与森林的创建3.4 树与森林的遍历3.4.1 先根遍历3.4.2 后根遍历3.4.3 森林的遍历3.5 树与森林的销毁3.6 算…

第四天 开始Unity Shader的学习之旅之Unity中的基础光照

Unity Shader的学习笔记 第四天 开始Unity Shader的学习之旅之Unity中的基础光照 文章目录 Unity Shader的学习笔记前言一、我们是如何看到这个世界的1. 光源2.吸收和散射3.着色 二、标准光照模型1. 自发光2. 高光反射① Phong模型② Blinn-Phong模型 3.漫反射4.环境光 总结 前…

基于SpringBoot的“社区居民诊疗健康管理系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“社区居民诊疗健康管理系统”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统模块功能结构图 局部E-R图 系统首…

Java-空链基础入门

经过调研和细致观察&#xff0c;我们发现空链对于初次接触或是对Stream和Optional不太熟悉的人来说&#xff0c;确实存在一定的上手难度&#xff0c;宛如开启了“地狱模式”。为了降低这一门槛&#xff0c;我们决定通过一系列由简入深的案例演示&#xff0c;来逐步引导大家掌握…