当前位置:   article > 正文

云原生 | 下一代CI/CD工具,Tekton牛刀小试自动化流水线_tekton工具

tekton工具

ca4b6f6126e81690f2f8693a9706a48e.jpeg

ed539887fb8607236114e0938c048762.gif

关注回复【学习交流群】加入【安全开发运维】答疑交流群

请朋友们【多多点击文中的广告】,支持作者更新更多文章

原文连接: 

云原生 | 下一代CI/CD工具,Tekton牛刀小试自动化流水线本文主要讲解了Tekton中Task、Taskrun、Pipeline、Pipelinerun以及Triggers触发器等对象的简单示例样式,帮助各位看友可以快速入门学习及上手Tekton这款云原生的CI/CD工具,让各位运维人减少工作时间https://mp.weixin.qq.com/s/TMYdGw4A4G-3zDYzmFWrrw


目录:

13cd3e52a84e7be2bf09580c0ef71088.png

本文为作者原创文章,为尊重作者劳动成果禁止非授权转载,若需转载请在【全栈工程师修炼指南】公众号留言,或者发送邮件到 [master@weiyigeek.top] 中我将及时回复。


0x02 简单使用

1.tekton 最小单位 Task 任务创建运行

描述: Task在API中表示为一种Task对象,它定义了一系列按顺序运行的步骤,以执行Task所需的逻辑。每个Task都作为一个pod在Kubernetes集群上运行,每个步骤都在自己的容器中运行。

Step 1.创建一个最简单的Task资源清单, 执行输出一段字符串。

  1. # create a Task
  2. tee Hello-World-Task.yaml <<'EOF'
  3. apiVersion: tekton.dev/v1beta1
  4. kind: Task
  5. metadata:
  6. name: hello
  7. spec:
  8. steps:
  9. - name: echo
  10. image: alpine:3.18
  11. script: |
  12. #!/bin/sh
  13. echo "Hello World, Tekton!"
  14. EOF
  15. # create a TaskRun
  16. tee Hello-World-TaskRun.yaml <<'EOF'
  17. apiVersion: tekton.dev/v1beta1
  18. kind: TaskRun
  19. metadata:
  20. name: hello-task-run
  21. spec:
  22. taskRef:
  23. name: hello
  24. EOF

Step 2.创建运行Task 并查看运行的 TaskRun 任务。

  1. # 部署 Task & TaskRun
  2. kubectl apply --filename Hello-World-Task.yaml
  3. # task.tekton.dev/hello createdkubectl apply --filename Hello-World-TaskRun.yaml
  4. # taskrun.tekton.dev/hello-task-run created
  5. # 查看部署的 TaskRun 任务与Pod
  6. kubectl get taskrun hello-task-run
  7. # NAME SUCCEEDED REASON STARTTIME COMPLETIONTIME
  8. # hello-task-run True Succeeded 118s 12s
  9. kubectl get pod hello-task-run-pod
  10. # NAME READY STATUS RESTARTS AGE
  11. # hello-task-run-pod 0/1 Completed 0 2m28s

Step 3.查看Task任务运行的结果

  1. kubectl logs --selector=tekton.dev/taskRun=hello-task-run
  2. # Hello World, Tekton!

2.使用pipeline流水线调用带有参数的Task任务

描述: 此小节作者创建并运行第一个 Tekton 管道,可以预定义参数。

Step 1.创建一个名为user的 Task 任务,根据参数输出一段字符串,需要注意的是在没有设置默认值时必须传入指定的参数值。

  1. tee User-Task.yaml <<'EOF'
  2. apiVersion: tekton.dev/v1beta1
  3. kind: Task
  4. metadata:
  5. name: user
  6. spec:
  7. params:
  8. - name: username
  9. type: string
  10. - name: url
  11. type: string
  12. steps:
  13. - name: hi
  14. image: ubuntu
  15. script: |
  16. #!/bin/bash
  17. echo "Hi, $(params.username)!"
  18. echo "Blog: $(params.url)"
  19. EOF

Step 2.创建一个名为hello-user的 Pipeline 以及运行 PipelineRun 流水线资源清单。

  1. # Tekton-Pipeline
  2. tee Tekton-Pipeline.yaml <<'EOF'
  3. apiVersion: tekton.dev/v1beta1
  4. kind: Pipeline
  5. metadata:
  6. name: hello-user
  7. spec:
  8. params:
  9. - name: username
  10. type: string
  11. - name: url
  12. type: string
  13. tasks:
  14. - name: hello
  15. taskRef:
  16. name: hello
  17. - name: user
  18. runAfter:
  19. - hello
  20. taskRef:
  21. name: user
  22. params:
  23. - name: username
  24. value: $(params.username)
  25. - name: url
  26. value: $(params.url)
  27. EOF
  28. # Tekton-PipelineRun : 传入预定义的参数值并调用执行 pipeline。
  29. tee Tekton-PipelineRun.yaml <<'EOF'
  30. apiVersion: tekton.dev/v1beta1
  31. kind: PipelineRun
  32. metadata:
  33. name: hello-user-run
  34. spec:
  35. pipelineRef:
  36. name: hello-user
  37. params:
  38. - name: username
  39. value: "Tekton"
  40. - name: url
  41. value: "https://blog.weiyigeek.top"
  42. EOF

Step 3.依次部署TaskPipeline以及PipelineRun

  1. kubectl apply -f User-Task.yaml
  2. # task.tekton.dev/user created
  3. kubectl apply -f Tekton-Pipeline.yaml
  4. # pipeline.tekton.dev/hello-user created
  5. kubectl apply -f Tekton-PipelineRun.yaml
  6. # pipelinerun.tekton.dev/hello-user-run created

Step 4.查看部署运行结果。

  1. kubectl get pipelines hello-user
  2. # NAME AGE
  3. # hello-user 81s
  4. kubectl get pipelineruns hello-user-run
  5. # NAME SUCCEEDED REASON STARTTIME COMPLETIONTIME
  6. # hello-user-run True Succeeded 37s 11s
  7. kubectl get pod -l tekton.dev/pipelineRun=hello-user-run
  8. # NAME READY STATUS RESTARTS AGE
  9. # hello-user-run-hello-pod 0/1 Completed 0 59s
  10. # hello-user-run-user-pod 0/1 Completed 0 55s
  11. kubectl logs -l tekton.dev/pipelineRun=hello-user-run
  12. # Hello World, Tekton!
  13. # Hi, Tekton!
  14. # Blog: https://blog.weiyigeek.top

Step 5.我们也可以使用前面安装的tkn命令tkn pipelinerun logs hello-user-run -f -n default,来查看创建的pipelinerun执行结果。

5c4456fb1cfdd21670e3bb715e5ad6c0.png

Step 6.除此之外,我们也可以使用前面安装的Tekton Dashboard的UI界面查看运行情况。

2958c2267cb8e1d3eaa57f53ccc3c3d2.png


3.使用Triggers触发器来调用流水线从而带有参数的Task任务

描述: 此处小节将快速演示triggers触发器创建及其使用,在前面编写的 Task 与 Pipelines 下进行。

Step 1.首先创建一个 TriggerTemplate 以及 TriggerBinding 对象.

  1. # Create a TriggerTemplate
  2. tee Tekton-TriggerTemplate.yaml <<'EOF'
  3. apiVersion: triggers.tekton.dev/v1beta1
  4. kind: TriggerTemplate
  5. metadata:
  6. name: hello-user-template
  7. spec:
  8. params:
  9. - name: username
  10. default: "WeiyiGeek"
  11. - name: url
  12. default: "https://www.weiyigeek.top"
  13. resourcetemplates:
  14. - apiVersion: tekton.dev/v1beta1
  15. kind: PipelineRun
  16. metadata:
  17. generateName: hello-user-run-
  18. spec:
  19. pipelineRef:
  20. name: hello-user
  21. params:
  22. - name: username
  23. value: $(tt.params.username)
  24. - name: url
  25. value: $(tt.params.url)
  26. EOF
  27. # Create a TriggerBinding
  28. tee Tekton-TriggerBinding.yaml <<'EOF'
  29. apiVersion: triggers.tekton.dev/v1beta1
  30. kind: TriggerBinding
  31. metadata:
  32. name: hello-user-binding
  33. spec:
  34. params:
  35. - name: username
  36. value: $(body.username)
  37. - name: url
  38. value: $(body.url)
  39. EOF

Step 2.然后再创建 EventListener RABC 以及 EventListener (事件监听器)

  1. # Create an EventListener RABC
  2. tee Tekton-Trigger-Rabc.yaml <<'EOF'
  3. apiVersion: v1
  4. kind: ServiceAccount
  5. metadata:
  6. name: tekton-robot
  7. ---
  8. apiVersion: rbac.authorization.k8s.io/v1
  9. kind: RoleBinding
  10. metadata:
  11. name: triggers-example-eventlistener-binding
  12. subjects:
  13. - kind: ServiceAccount
  14. name: tekton-robot
  15. roleRef:
  16. apiGroup: rbac.authorization.k8s.io
  17. kind: ClusterRole
  18. name: tekton-triggers-eventlistener-roles
  19. ---
  20. apiVersion: rbac.authorization.k8s.io/v1
  21. kind: ClusterRoleBinding
  22. metadata:
  23. name: triggers-example-eventlistener-clusterbinding
  24. subjects:
  25. - kind: ServiceAccount
  26. name: tekton-robot
  27. namespace: default
  28. roleRef:
  29. apiGroup: rbac.authorization.k8s.io
  30. kind: ClusterRole
  31. name: tekton-triggers-eventlistener-clusterroles
  32. EOF
  33. # Create an EventListener
  34. tee Tekton-Trigger-EventListener.yaml <<'EOF'
  35. apiVersion: triggers.tekton.dev/v1beta1
  36. kind: EventListener
  37. metadata:
  38. name: hello-user-listener
  39. spec:
  40. serviceAccountName: tekton-robot
  41. triggers:
  42. - name: hello-trigger
  43. bindings:
  44. - ref: hello-user-binding
  45. template:
  46. ref: hello-user-template
  47. EOF

Step 3.将上述资源清单配置到Kubernetes集群中

  1. kubectl apply -f Tekton-TriggerTemplate.yaml
  2. # triggertemplate.triggers.tekton.dev/hello-user-template created
  3. kubectl apply -f Tekton-TriggerBinding.yaml
  4. # triggerbinding.triggers.tekton.dev/hello-user-binding created
  5. kubectl apply -f Tekton-Trigger-Rabc.yaml
  6. # serviceaccount/tekton-robot created
  7. # rolebinding.rbac.authorization.k8s.io/triggers-example-eventlistener-binding created
  8. # clusterrolebinding.rbac.authorization.k8s.io/triggers-example-eventlistener-clusterbinding created
  9. kubectl apply -f Tekton-Trigger-EventListener.yaml
  10. # eventlistener.triggers.tekton.dev/hello-user-listener created

Step 4.验证触发器部署情况

  1. # 查看创建的 triggertemplates,triggerbindings,eventliste 等资源
  2. kubectl get triggertemplates,triggerbindings,eventliste
  3. # 事件触发地址
  4. eventlistener.triggers.tekton.dev/hello-user-listener
  5. http://el-hello-user-listener.default.svc.cluster.test:8080

57bb7bf8c777803de3103c795d6dabcf.png

Step 5.管理与验证触发器是否能触发Pipeline流水线的执行, 此处我直接使用SVC服务名进行演示请求,在实际场景中你可能需要使用ingress进行暴露。

  1. # 查看 K8S 集群的DNS
  2. $ kubectl get svc -n kube-system
  3. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
  4. kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP,9153/TCP 405d
  5. # 设置集群DNS的地址到主机resolv.conf文件中
  6. vim /etc/resolv.conf
  7. # 验证解析
  8. ping el-hello-user-listener.default.svc.cluster.test
  9. # 使用 curl 模拟请求触发,注意传递的参数哟。
  10. curl -v \
  11. -H 'content-Type: application/json' \
  12. -d '{"username": "Tekton","url": "https://www.weiyigeek.top"}' \
  13. http://el-hello-user-listener.default.svc.cluster.test:8080

执行结果: {"eventListener":"hello-user-listener","namespace":"default","eventListenerUID":"6a6f31ab-47c7-4ef0-9d78-46450fbbc334","eventID":"7accd3ec-21b6-4d38-a164-145a84a3347e"}

5e4f7342f3477f57eb6e78ed36617f74.png


偷偷的告诉你哟?极客全栈修炼】微信小程序已开放

可直接在微信里面直接浏览博主文章哟,后续将上线更多有趣的小工具。


Step 6.最后验证是否触发绑定的流水线的执行,此时检查PipelineRun日志该名称是自动生成的,每次运行都添加一个后缀,在本例中为hello-user-run-s29pd

  1. kubectl get pipelineruns -l triggers.tekton.dev/eventlistener=hello-user-listener
  2. # NAME SUCCEEDED REASON STARTTIME COMPLETIONTIME
  3. # hello-user-run True Succeeded 142m 142m
  4. # hello-user-run-s29pd True Succeeded 4m44s 118s
  5. # 再使用tkn命令中指定PiepelineRun名称查看对应日志
  6. tkn pipelinerun logs hello-user-run-s29pd -f
  7. [hello : echo] Hello World, Tekton!
  8. [user : hi] Hi, Tekton!
  9. [user : hi] Blog: https://www.weiyigeek.top

4.使用dashboard来创建运行 TaskRuns 与 PipelineRuns 触发任务执行

描述: 此处简单使用 tekton-dashboard 界面来创建运行 TaskRuns 与 PipelineRuns 示例,值得注意的是tekton-dashboard 不支持Task任务以及Pipeline对象创建,所以你需要提前在K8S中执行创建。

Step 1.首先,我们需要在集群中使用kubectl命令来创建Tekton的最小单元Task资源清单, 此处模拟拉取作者的主页HTML源码。

  1. tee Git-Task.yaml <<'EOF'
  2. apiVersion: tekton.dev/v1beta1
  3. kind: Task
  4. metadata:
  5. name: git
  6. spec:
  7. params:
  8. - name: project-name
  9. type: string
  10. - name: project-url
  11. type: string
  12. steps:
  13. - name: git
  14. image: bitnami/git:2.41.0
  15. script: |
  16. #!/usr/bin/env bash
  17. echo -e "Hello, Tekton Dashboard Test!\nAuthor:WeiyiGeek"
  18. echo "Project Name:$(params.project-name)"
  19. echo "Project Url:$(params.project-url)"
  20. pwd && git version && cd /tmp
  21. git clone $(params.project-url)
  22. cd ./$(params.project-name) && pwd && ls
  23. EOF
  24. # 部署该Task
  25. kubectl apply -f Git-Task.yaml
  26. # task.tekton.dev/git created

Step 2.访问tekton-dashboard 界面创建 TaskRuns,点击 Tekton 资源 -> TaskRuns -> 创建名为 git-task -> 选择参数配置 或者YAML方式配置 (此处我将Yaml配置贴上)

  1. apiVersion: tekton.dev/v1beta1
  2. kind: TaskRun
  3. metadata:
  4. name: git-task
  5. namespace: default
  6. labels:
  7. action: git
  8. spec:
  9. taskRef:
  10. name: git
  11. kind: Task
  12. params:
  13. - name: project-name
  14. value: weiyigeek
  15. - name: project-url
  16. value: https://gitee.com/WeiyiGeek/weiyigeek.git
  17. serviceAccountName: default

a7afde35bc8a781dacfe8d4a50bfdceb.png

Step 3.点击创建的git-task查看此Task运行结果

bbeff7492f3b997437cf79a5a9f140d2.png

Step 4.前面完成TaskRun对象的创建执行,此处将演示PipelineRuns对象创建和触发执行,同样的你需要在K8S集群先执行部署。

  1. tee Git-Pipeline.yaml <<'EOF'
  2. apiVersion: tekton.dev/v1beta1
  3. kind: Pipeline
  4. metadata:
  5. name: git
  6. spec:
  7. params:
  8. - name: project-name
  9. type: string
  10. - name: project-url
  11. type: string
  12. tasks:
  13. - name: git
  14. taskRef:
  15. name: git
  16. params:
  17. - name: project-name
  18. value: $(params.project-name)
  19. - name: project-url
  20. value: $(params.project-url)
  21. EOF
  22. kubectl apply -f Git-Pipeline.yaml
  23. # pipeline.tekton.dev/git created

Step 5.点击,如上所创建 pipelineRuns -> 选择参数或者YAML方式配置, 此处我传递了存放我的主页的代码仓库信息。

  1. apiVersion: tekton.dev/v1beta1
  2. kind: PipelineRun
  3. metadata:
  4. name: git-pipeline-run
  5. namespace: default
  6. labels:
  7. action: git
  8. spec:
  9. pipelineRef:
  10. name: git
  11. params:
  12. - name: project-name
  13. value: weiyigeek
  14. - name: project-url
  15. value: https://gitee.com/WeiyiGeek/weiyigeek.git
  16. timeouts:
  17. pipeline: git
  18. tasks: git

6fcab3b4b30f5826acffa4db47f49ae8.png

亲,文章就要看完了,不关注一下【全栈工程师修炼指南】吗?

Step 6.然后点击创建的 git-pipeline-run 流水线任务查看其运行的结果。

acb4be2b2ddf9fca66bc0ae50fe4db54.png

温馨提示:更多的发现、搜索和共享可重复使用的任务和管道,可以参考官方提供的类似于Hub的地址 https://hub.tekton.dev/ , 作为新手应该多多学习。

d26bd5a95dc89afbba9ca1727175cc2a.png

至此,在Tekton-Dashboar中创建执行 TaskRuns 以及 PipelineRuns 对象演示完毕。

本文至此完毕,更多技术文章,尽情等待下篇好文!

原文地址: https://blog.weiyigeek.top/2023/7-22-768.html

【 如果此篇文章对你有帮助,请你将它分享给更多的人! 】

b19038a78dd063909a52f5a2e374b778.gif

c4194009c55b855c8d67ccfa43c92d32.png 学习书籍推荐 往期发布文章 2e81ddc2fea44c0a29a30d1225bfe869.png

回复【0014】获取【Nginx学习之路汇总】

回复【0015】获取【Jenkins学习之路汇总】

回复【10005】获取【adb工具刷抖音赚米】

回复【0011】获取【k8S二进制安装部署教程】

回复【10006】获取【CentOS8安全加固脚本】

回复【10001】获取【WinServer安全加固脚本】

回复【0008】获取【Ubuntu22.04安装与加固脚本】

回复【10002】获取【KylinOS银河麒麟安全加固脚本】

 热文推荐  

按(扫描)二维码 关注 【全栈工程师修炼指南】(^U^)ノ~YO

欢迎添加作者微信【weiyigeeker】,一起入坑吧!

关注回复【学习交流群】即可加入【安全开发运维沟通交流群

      各位亲爱的读者,现在公众号更改了推送规则,如果您需要第一时间看到我们推送的好内容。

一定要记得给公众号星标,经常点赞、在看、转发、分享和留下您的评论 !

点击【"阅读原文"】获取更多有趣的知识                                            若有帮助请点个【在看 赞 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/674827
推荐阅读
相关标签
  

闽ICP备14008679号